版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第17章GRASP:基于職責(zé)設(shè)計(jì)對(duì)象
GRASP:DesigningObjectswithResponsibilities1圖17-1制品關(guān)系〔強(qiáng)調(diào)了對(duì)OO設(shè)計(jì)的影響2職責(zé)和方法UML定義職責(zé)(Responsibility)為“類元的契約或義務(wù)。方法(Method)用來實(shí)現(xiàn)〔履行〕職責(zé)。一個(gè)職責(zé)可能要許多類和方法(method)來實(shí)現(xiàn),也可能只要很少方法來實(shí)現(xiàn),這是由職責(zé)的粒度(granularity)來決定的。3職責(zé)可分成兩類:“認(rèn)知〞責(zé)〔knowing〕“行為〞職責(zé)〔doing〕“知道〞私有的封裝數(shù)據(jù)“知道〞相關(guān)聯(lián)的對(duì)象“知道〞能夠派生或計(jì)算出的事物“做〞自身的一些事情。如創(chuàng)立一個(gè)對(duì)象或進(jìn)行一次計(jì)算?!白雳暺渌鼘?duì)象的初始化操作??刂坪蛥f(xié)調(diào)其它對(duì)象的活動(dòng)。4職責(zé)和交互圖圖17-2職責(zé)與方法是相關(guān)的在UML制品〔artifacts〕中,通常是在建立交互圖的語(yǔ)境來考慮對(duì)象的職責(zé)分配,通過方法來實(shí)現(xiàn)職責(zé)。5設(shè)計(jì)模式〔Patterns〕富有經(jīng)驗(yàn)的面向?qū)ο蠹夹g(shù)專家〔或其它軟件開發(fā)人員〕為解決某些問題而設(shè)計(jì)的解決方案,可作為通用原那么(GeneralPrinciples)和慣用法(Idioms),用于指導(dǎo)軟件設(shè)計(jì)。如果將這些原那么和慣用法以一種結(jié)構(gòu)化的形式加以描述,給出問題和解決方案,然后起一個(gè)名字。這就是設(shè)計(jì)模式(Patterns)。例如:模式名:信息專家(InformationExpert)問題:為了獲取某些信息,分配職責(zé)給對(duì)象的基本原則是什么?解決方案:將職責(zé)分配給信息專家--含有滿足職責(zé)所需信息的類。設(shè)計(jì)模式是一些針對(duì)特定問題的成功的解決方案6GoF關(guān)于設(shè)計(jì)模式的著作英文版于1994年出版這本書被認(rèn)為是設(shè)計(jì)模式的“圣經(jīng)〞,它描述了23個(gè)OO設(shè)計(jì)模式這本書的作者有四人ErichGamma,RichardHelm,RalphJohnson,JohnVlissides,因此被稱為GoF〔GangofFour,四人幫〕設(shè)計(jì)模式閱讀該書要有一定的OO設(shè)計(jì)和編程知識(shí)〔C++〕學(xué)習(xí)GRASP和根本GoF模式是本課程的關(guān)鍵目標(biāo)7GRASP:分配職責(zé)通用原那么的模式GRASP作為設(shè)計(jì)模式來描述對(duì)象設(shè)計(jì)和職責(zé)分配的根本原那么。GRASP模式:創(chuàng)立者(Creator)信息專家(InformationExpert)低耦合(LowCoupling)控制器(Controller)高內(nèi)聚(HighCohesion)GeneralResponsibilityAssignmentSoftwarePattern8創(chuàng)立者〔Creator〕模式名:創(chuàng)立者問題:誰創(chuàng)立了A?解決方案(可被視作建議):如果以下條件之一成立,那么可以將創(chuàng)立類A實(shí)例的職責(zé)分配給類B。B包含了A對(duì)象;B組成聚集了A;B記錄了A;B緊密地使用A;B具有A的初始化數(shù)據(jù)9問題:由誰創(chuàng)立Square對(duì)象圖17-3Monopoly迭代1的領(lǐng)域模型10圖17-4在動(dòng)態(tài)模型中運(yùn)用創(chuàng)立者模式圖17-5在設(shè)計(jì)模型的DCD中,Board與Square具有組成聚合關(guān)聯(lián)。我們?cè)陟o態(tài)模型中應(yīng)用了創(chuàng)立者在動(dòng)態(tài)和靜態(tài)模型中應(yīng)用創(chuàng)立者模式11信息專家〔InformationExpert〕模式名:信息專家〔或?qū)<摇硢栴}:給對(duì)象分配職責(zé)的根本原那么是什么?解決方案(建議):將職責(zé)分配給具有完成該職責(zé)所需信息的那個(gè)類12問題:如果給定鍵值,誰知道Square對(duì)象的相關(guān)信息圖17-6應(yīng)用專家模式13低耦合〔LowCoupling〕模式名:低耦合問題:如何減少因變化產(chǎn)生的影響?解決方案(建議):分配職責(zé)以使(不必要的)耦合保持在較低的水平。使用該原那么對(duì)可選方案進(jìn)行評(píng)估14圖17-7評(píng)介耦合對(duì)設(shè)計(jì)影響此方案中Dog與Board都必須知道Square,而上一方案只有Board知道Square,所以上一方案耦合度更低。15為什么期望低耦合因?yàn)榈婉詈贤軌驕p少修改軟件所需的時(shí)間、工作量和缺陷。16創(chuàng)立者模式與低耦合創(chuàng)立者模式支持低耦合度,意味著具有較低的依賴關(guān)系和較高的重用時(shí)機(jī)。因?yàn)楸粍?chuàng)立的類很可能早已經(jīng)對(duì)創(chuàng)立者類可見〔即在創(chuàng)立者類已有方法涉及被創(chuàng)立者類〕,耦合程度不會(huì)增加。17信息專家模式與低耦合信息專家模式支持低耦合度。因?yàn)樾畔<夷J桨崖氊?zé)分配給擁有完成職責(zé)所需信息的對(duì)象。如果我們把職責(zé)分配給其他對(duì)象,那么信息需要被這些對(duì)象共享會(huì)增加耦合度。18控制器〔Controller〕模式名:控制器問題:在UI層之上首先接收和協(xié)調(diào)(控制)系統(tǒng)操作的對(duì)象是什么?解決方案:將接收或處理系統(tǒng)事件消息的職責(zé)分派給代表以下事務(wù)的類:代表全部“系統(tǒng)〞或“根對(duì)象〞,如MonopolyGame對(duì)象代表運(yùn)行軟件的設(shè)備,如Phone,BankCashMachine代表用例或會(huì)話出現(xiàn)。通常命名為<用例名>Handler,<用例名>Session。如,PlayMonopolyGameHandler。19問題:誰首先來處理playGame系統(tǒng)系統(tǒng)圖17-8Monopoly游戲的SSD。注意playGame操作20根據(jù)模型與視圖別離原那么,UI對(duì)象不應(yīng)當(dāng)包括業(yè)務(wù)邏輯,應(yīng)該把請(qǐng)求委派給領(lǐng)域?qū)拥膶?duì)象。圖17-9誰是用于playGame系統(tǒng)操作的控制器21如果只有少數(shù)幾個(gè)系統(tǒng)操作,可以選擇代表全部“系統(tǒng)〞或“根對(duì)象〞。圖17-10應(yīng)用控制器模式-使用MomopolyGame。所UI層與軟件對(duì)象的領(lǐng)域?qū)舆B接起來22高內(nèi)聚〔HighCohesion〕模式名:高內(nèi)聚問題:怎樣使對(duì)象保持有內(nèi)聚、可理解和可管理,同時(shí)具有支持低耦合的附加作用?解決方案:職責(zé)分配應(yīng)保持高內(nèi)聚,依此來評(píng)估備選方案。23什么是高內(nèi)聚度〔HighCohesion〕高內(nèi)聚度是對(duì)一個(gè)類中的各個(gè)職責(zé)之間相關(guān)程度和集中程度的度量。一個(gè)具有高度相關(guān)職責(zé)的類并且這個(gè)類所能完成的工作量不是特別巨大,那么它就具有高內(nèi)聚度。包括兩個(gè)意思:不要給一個(gè)類分派太多的職責(zé),在履行職責(zé)時(shí)盡量將局部職責(zé)分派給有能力完成的其它類去完成。不相關(guān)的職責(zé)不要分派給同一個(gè)類。24圖17-11比照不同設(shè)計(jì)的內(nèi)聚程度左側(cè)的方案中,MonopolyGame對(duì)象自己完成全部工作
右側(cè)方案中,MonopolyGame為playGame請(qǐng)求對(duì)工作進(jìn)行了委派25GRASP在NextGenPOS設(shè)計(jì)中的例如26創(chuàng)立者模式例如:誰該負(fù)責(zé)創(chuàng)立SalesLineItem?圖17-12局部領(lǐng)域模型27Sale,因?yàn)樗薙alesLineItem圖17-13創(chuàng)立SalesLineItem28信息專家例如:誰應(yīng)當(dāng)負(fù)責(zé)了解銷售的總額圖17-14Sale的關(guān)聯(lián)答案:查找具有完成職責(zé)所需信息的類。1〕如果DCD中存在相關(guān)類,那么在DCD中查找2〕否那么查看領(lǐng)域模型,并嘗試?yán)?或擴(kuò)充)它的表示,以激發(fā)相應(yīng)設(shè)計(jì)類的創(chuàng)立29Sale的新職責(zé)圖17-15局部交互圖和類圖30SalesLineItem的新職責(zé)圖17-16計(jì)算Sale的總額31ProductDescription的新職責(zé)圖17-17計(jì)算Sale的總額32低耦合模式例如:誰負(fù)責(zé)創(chuàng)立Payment圖17-18Register創(chuàng)立PaymentRegister記錄了PaymentSale具有初始化Payment的數(shù)據(jù)〔支付總額〕,另支持是針對(duì)Sale進(jìn)行的方案一〔創(chuàng)立者模式〕:33圖17-19Sale創(chuàng)立Payment方案二〔創(chuàng)立者模式〕:結(jié)論:方案二耦合度更低。禁忌:高耦合對(duì)于穩(wěn)定和普遍使用的元素而言不是問題同。如Java庫(kù)。34控制器模式例如:
enterItem,endSale等系統(tǒng)操作的控制器是誰?圖17-20NextGenPOS應(yīng)用中的假設(shè)干系統(tǒng)操作35圖17-21哪個(gè)對(duì)象應(yīng)該是enterItem的控制器哪個(gè)對(duì)象應(yīng)該是enterItem的控制器36可能的選擇:
1.代表整個(gè)“系統(tǒng)〞、“根對(duì)象〞、裝置或子系統(tǒng):
Register,POSSystem
2.代表用例場(chǎng)景中所有系統(tǒng)事件的接收者或處理者:
ProcessSaleHandler,ProcessSaleSession.圖17-22控制器的選擇37不同方案的系統(tǒng)操作分配圖17-23系統(tǒng)操作的分配38關(guān)于控制器模式的討論控制器設(shè)計(jì)中的常見缺陷是分配的職責(zé)過多。這時(shí),控制器會(huì)具有不良(低)內(nèi)聚,從而違反了高內(nèi)聚的原那么準(zhǔn)那么:正常情況下,控制器應(yīng)當(dāng)把需要完成的工作委派給其它對(duì)象??刂破髦皇菂f(xié)調(diào)或控制這些活動(dòng),本身并不完成大量工作。UP和Jacobson的原有對(duì)象方法中,有邊界對(duì)象(接口的抽象),實(shí)體對(duì)象(領(lǐng)域軟件對(duì)象)和控制對(duì)象(控制器模式中的用例處理者)的概念。控制器模式的重要結(jié)果是,UI對(duì)象和UI層不應(yīng)具有實(shí)現(xiàn)系統(tǒng)事件的職責(zé)。系統(tǒng)操作應(yīng)該在應(yīng)用邏輯層或領(lǐng)域?qū)油瓿伞?9控制器在WebUI和效勞器的應(yīng)用在Web頁(yè)面中混入應(yīng)用邏輯是ASP.NET程序設(shè)計(jì)中常用的、脆弱的編程類型。效勞器端的WebUI框架(如:Structs)包含Web-MVC(模型-視圖-控制器)模式的概念。Web-MVC中的控制器與GRASP控制器不同,前者是UI層的一局部,并且控制UI層的交互及頁(yè)面流;后者是領(lǐng)域?qū)拥囊痪植浚刂苹騾f(xié)調(diào)工作請(qǐng)求的處理,它根本不知道所用的UI技術(shù)是什么?40UI層與控制器交互的編程例如使用JavaSwing的實(shí)現(xiàn):富客戶端UIP222使用JavaStructs實(shí)現(xiàn),客戶端瀏覽器和WebUIP22441浮腫的控制器在系統(tǒng)中只有一個(gè)簡(jiǎn)單的控制器接收所有的系統(tǒng)事件,并且系統(tǒng)事件非常多??刂破鞅旧韴?zhí)行許多實(shí)現(xiàn)系統(tǒng)事件必需的任務(wù),而沒有把工作委托給別的類??刂破鞅旧砭哂性S多屬性,并維護(hù)著系統(tǒng)或者領(lǐng)域中本應(yīng)該分布到其它對(duì)象的大量信息,或在別處可以找到的重復(fù)信息。42防止浮腫的控制器的一些解決方案增加控制器。使用用例控制器,而不是外觀控制器航空預(yù)訂系統(tǒng)例如
設(shè)計(jì)控制器,使它把完成每個(gè)系統(tǒng)操作的職責(zé)委派給其它對(duì)象43界面層不處理系統(tǒng)事件-期望的圖17-24UI層到領(lǐng)域?qū)又g所期望的耦合44界面層不處理系統(tǒng)事件-不期望的圖17-25UI層到領(lǐng)域?qū)铀惶谕鸟詈?5創(chuàng)立Payment類的對(duì)象的職責(zé)可以交給Sale類去完成。:Register
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大概念統(tǒng)領(lǐng)下的九年級(jí)歷史單元起始課教學(xué)設(shè)計(jì):資本主義的萌芽與初步發(fā)展
- 高二市場(chǎng)營(yíng)銷《銷售拜訪總結(jié)與實(shí)踐》教學(xué)設(shè)計(jì)
- 初中物理九年級(jí)《電路、電流、電壓與電阻》單元核心概念精講與能力進(jìn)階方案
- 醫(yī)院法規(guī)政策清單及實(shí)務(wù)參考
- 新能源企業(yè)煙氣余熱發(fā)電技術(shù)白皮書
- 機(jī)場(chǎng)建設(shè)項(xiàng)目安全管理方案
- 網(wǎng)絡(luò)安全自查報(bào)告模板及注意事項(xiàng)
- 胸外科科室年度工作總結(jié)模板
- 商業(yè)合同法律風(fēng)險(xiǎn)防范手冊(cè)
- 物流倉(cāng)儲(chǔ)管理信息系統(tǒng)操作指南
- 長(zhǎng)護(hù)險(xiǎn)人員管理培訓(xùn)制度
- 2026河南大學(xué)附屬中學(xué)招聘77人備考題庫(kù)附答案
- 網(wǎng)絡(luò)安全運(yùn)維與管理規(guī)范(標(biāo)準(zhǔn)版)
- 2026年包頭職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試模擬試題含答案解析
- 2026年XX醫(yī)院兒科護(hù)理工作計(jì)劃
- 2025-2026學(xué)年貴州省安順市多校高一(上)期末物理試卷(含答案)
- 呼吸機(jī)相關(guān)肺炎預(yù)防策略指南2026
- 妊娠期缺鐵性貧血中西醫(yī)結(jié)合診療指南-公示稿
- 北京市2025年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷三套及答案
- 2026年上海理工大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)附答案
- TCEC電力行業(yè)數(shù)據(jù)分類分級(jí)規(guī)范-2024
評(píng)論
0/150
提交評(píng)論