版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、GRASP:基于職責(zé)設(shè)計(jì)對(duì)象,目標(biāo),學(xué)習(xí)使用面向?qū)ο笤O(shè)計(jì)的5個(gè)GRASP原則或模式,UML與設(shè)計(jì)原則,最關(guān)鍵的軟件開發(fā)工具是受過良好設(shè)計(jì)原則訓(xùn)練的思維(而不是UML或其他任何技術(shù))。學(xué)習(xí)GRAPS和基本GoF設(shè)計(jì)模式是本書的關(guān)鍵目標(biāo)。,職責(zé)和職責(zé)驅(qū)動(dòng)設(shè)計(jì),考慮系統(tǒng)中各個(gè)對(duì)象的職責(zé)、角色和協(xié)作,以此來驅(qū)動(dòng)設(shè)計(jì)的過程,稱為職責(zé)驅(qū)動(dòng)的設(shè)計(jì)。職責(zé):類元(Classifier)的職責(zé)或義務(wù)。職責(zé)的類型:行為(doing)認(rèn)知(know
2、ing),職責(zé)和職責(zé)驅(qū)動(dòng)設(shè)計(jì),行為職責(zé):自身執(zhí)行的一些行為,如創(chuàng)建對(duì)象或計(jì)算初始化其他的對(duì)象控制和協(xié)調(diào)其他對(duì)象中的活動(dòng)認(rèn)知職責(zé)對(duì)私有封裝數(shù)據(jù)的認(rèn)知對(duì)相關(guān)對(duì)象的認(rèn)知對(duì)其能夠?qū)С龌蛴?jì)算的事物的認(rèn)知,GRASP,General Responsibility Assignment Software Patterns使用職責(zé)進(jìn)行OO設(shè)計(jì)的基本原則幫助你理解基本對(duì)象設(shè)計(jì),以一種系統(tǒng)的,合理的,可以解釋的方式來推導(dǎo)設(shè)計(jì)。,職責(zé)、GR
3、ASP和UML圖之間的關(guān)系,交互圖與分配職責(zé)密切相關(guān):繪制交互圖的過程就是職責(zé)分配的過程。,什么是模式(pattern),在面向?qū)ο蟮脑O(shè)計(jì)中,模式是對(duì)問題和解決方案的已命名描述。模式的關(guān)鍵元素:名稱問題解決方案對(duì)于特定的問題,可以應(yīng)用許多原則(模式)為對(duì)象分配職責(zé)模式陳述的不是新的設(shè)計(jì)思想,而是將已有的,經(jīng)過驗(yàn)證的知識(shí)、慣用法和原則匯編起來。,用到的領(lǐng)域模型,低耦合,問題:怎樣降低依賴性,減少變化帶來的影響,提高復(fù)用性。
4、解決方案: 使得耦合盡可能低的方式分配職責(zé)。,低耦合(cont),什么是耦合耦合是某元素和其他元素之間的連接、感知和依賴程度的度量。低耦合意味著對(duì)其他元素的依賴程度低。高耦合導(dǎo)致的問題: 局部的變化影響整體難以被單獨(dú)理解難以重用,低耦合: Example,假設(shè)我們需要?jiǎng)?chuàng)建Payment的實(shí)例,將他關(guān)聯(lián)到Sale。哪個(gè)類應(yīng)該擔(dān)當(dāng)這個(gè)職責(zé)?,Payment,Register,Sale,低耦合: Example (cont),:
5、Register,makePayment(),,p:Payment,,1:create(),,:Sale,,2:addPayment(p),:Register,makePayment(),,:Sale,,1:makePayment(),,:Payment,1.1:create(),,,低耦合: Discussion,低耦合是在設(shè)計(jì)決策期間必須牢記的原則,是應(yīng)該不斷被考慮的基本目標(biāo)。通常會(huì)與其他模式一起考慮,如“信息專家”或“高內(nèi)聚”,
6、低耦合: Discussion (cont),沒有絕對(duì)的度量標(biāo)準(zhǔn)來衡量耦合程度的高低低耦合的極端例子是沒有耦合:對(duì)象間沒有或極少通信。不可取,因?yàn)檫@個(gè)例子違反了對(duì)象技術(shù)的基本原則:系統(tǒng)由相互連接的對(duì)象組成,對(duì)象之間通過消息通信。耦合度過低產(chǎn)生不良設(shè)計(jì),其中會(huì)使用一些缺乏內(nèi)聚性、膨脹、復(fù)雜的對(duì)象來完成所有工作。對(duì)象間適度的耦合對(duì)于一個(gè)優(yōu)良的面向?qū)ο笙到y(tǒng)是非常重要的。,低耦合: Discussion (cont),優(yōu)點(diǎn):不受其它
7、構(gòu)件變化的影響易于單獨(dú)理解便于重用低耦合與信息隱藏,低耦合:耦合的類型,TypeX 與TypeY有關(guān)系TypeX具有TypeY的屬性TypeX直接或間接引用了TypeY,比如局部變量,參數(shù),或?qū)ο笳{(diào)用對(duì)象TypeY的服務(wù)。TypeX是 TypeY的子類. TypeY是接口,TypeA實(shí)現(xiàn)了該接口,低耦合:限制,高耦合對(duì)于穩(wěn)定和普遍使用的元素不是問題.比如,J2EE應(yīng)用能夠安全地將自己與Java庫(java.util)耦合,
8、因?yàn)镴ava庫是穩(wěn)定、普遍使用的。,高內(nèi)聚,問題怎樣保持對(duì)象是有重點(diǎn)的、可理解的、可管理的,并且能夠支持低耦合解決方案分配職責(zé)以保持較高的內(nèi)聚性。內(nèi)聚:對(duì)元素職責(zé)的相關(guān)性和集中度的度量內(nèi)聚性低的類要做許多不相關(guān)的工作,導(dǎo)致下列問題:難以理解難以復(fù)用難以維護(hù)經(jīng)常受到變化的影響,示例(低內(nèi)聚),示例(高內(nèi)聚),內(nèi)聚程度的一些場(chǎng)景,非常低的內(nèi)聚:由一個(gè)單獨(dú)的類負(fù)責(zé)完全不同功能領(lǐng)域中的大量事務(wù)低內(nèi)聚:由一個(gè)類單獨(dú)負(fù)責(zé)一個(gè)功能
9、性領(lǐng)域內(nèi)的復(fù)雜事務(wù)高內(nèi)聚:由一個(gè)類負(fù)責(zé)一個(gè)功能性領(lǐng)域內(nèi)的復(fù)雜事務(wù),并與其它類協(xié)作完成任務(wù)。適度內(nèi)聚:類同時(shí)負(fù)責(zé)幾個(gè)輕量級(jí)的領(lǐng)域,這些領(lǐng)域中的概念與該類相關(guān),但彼此之間沒有關(guān)系。,內(nèi)聚與耦合的關(guān)系,低內(nèi)聚通常導(dǎo)致高耦合。,可以接受低內(nèi)聚的例外,將一組職責(zé)或代碼放入一個(gè)類或構(gòu)件中,以使維護(hù)人員能方便地對(duì)其進(jìn)行維護(hù)。為了提高分布式對(duì)象的效率。,優(yōu)點(diǎn),能夠更加輕松、清楚地理解設(shè)計(jì)簡化了維護(hù)和改進(jìn)工作通常支持低耦合提高復(fù)用性,創(chuàng)建者,
10、問題某類的新實(shí)例應(yīng)該由誰來創(chuàng)建。解決方案如果以下的條件之一為真時(shí),將創(chuàng)建類A的實(shí)例的職責(zé)分配給BB包含或聚集AB具有A的初始化數(shù)據(jù)。,創(chuàng)建者示例,組合關(guān)系?創(chuàng)建者可以通過尋找具有初始化數(shù)據(jù)的類來確定創(chuàng)建者:Sale?Payment與低耦合模式相關(guān),可以認(rèn)為是低耦合模式在創(chuàng)建對(duì)象時(shí)的一個(gè)應(yīng)用。,創(chuàng)建者,對(duì)象的創(chuàng)建通常具有相當(dāng)?shù)膹?fù)雜性,最好的方法是把創(chuàng)建職責(zé)委派給工廠(抽象或具體)類。優(yōu)點(diǎn)支持低耦合相關(guān)模式低耦合具體
11、工廠和抽象工廠整體-部分(組合模式),信息專家 (Information Expert),問題:給對(duì)象分配職責(zé)的基本原則是什么?解決方案: 將職責(zé)分配給信息專家,他擁有實(shí)現(xiàn)這個(gè)類所必需的信息,信息專家 (Information Expert),在我們的系統(tǒng)中,誰應(yīng)該負(fù)責(zé)計(jì)算銷售的合計(jì)?,,Contains,1..*,,*,Described-by,,信息專家 (Information Expert),為了計(jì)算合計(jì)需要哪些信息?
12、SalesLineItem 與 Sale關(guān)聯(lián).而合計(jì)可以從SalesLineItem 的小計(jì)算出。因此Sale是信息專家結(jié)束了嗎?,信息專家 (Information Expert)(cont),誰負(fù)責(zé)計(jì)算SalesLineItem的小計(jì)?需要的信息: SalesLineItem.quantity 和相關(guān)的ProductSpecification.price根據(jù)信息專家模式,應(yīng)該是SalesLineItem負(fù)責(zé)計(jì)算SalesLi
13、neItem的小計(jì),信息專家 (Information Expert)(cont),信息專家 (Information Expert) : 討論,信息專家模式是對(duì)現(xiàn)實(shí)的模擬DIY : Do It Yourself,信息專家 (Information Expert) : 優(yōu)點(diǎn),保證了封裝性對(duì)象使用他們自己的信息來完成職責(zé)。支持低耦合,使得系統(tǒng)更為健壯,更易于維護(hù)行為分布在擁有所需信息的類中提倡定義內(nèi)聚性更強(qiáng)的“輕量級(jí)”類,這樣的
14、類易于理解和維護(hù)。通常支持高內(nèi)聚,信息專家 (Information Expert):限制,在有些場(chǎng)合,由于高內(nèi)聚和低耦合的要求,信息專家模式并不適用。比如,誰應(yīng)該將Sale存入DB?,控制器,問題:系統(tǒng)事件應(yīng)該由誰來處理?解決方案:將系統(tǒng)事件分配給下面的對(duì)象:代表整個(gè)“系統(tǒng)”、“根對(duì)象” 的類。代表用例場(chǎng)景的類,該事件就是場(chǎng)景中發(fā)生的一個(gè)事件 (use-case controller)對(duì)于同一用例場(chǎng)景的所有系統(tǒng)事件使用
15、相同的控制器類??梢苑乐乖赨I層處理業(yè)務(wù)邏輯,控制器(cont),系統(tǒng)事件 由外部產(chǎn)生的高層的事件系統(tǒng)事件不是UI事件,不是像Window/View這樣的對(duì)象。UI通過UI事件接受并組合為一個(gè)系統(tǒng)事件,將其委派給控制器完成。由系統(tǒng)操作來執(zhí)行,系統(tǒng)事件,系統(tǒng)事件,控制器: Example,在行為分析的過程中(比如系統(tǒng)順序圖),系統(tǒng)操作被識(shí)別出來,并賦給 System對(duì)象。然而,這并不是說該事件將由名為System的對(duì)象處理。究
16、竟誰處理這個(gè)事件是在設(shè)計(jì)時(shí)引入的控制器對(duì)象時(shí)分配的。,控制器: Example (cont),誰來處理登錄商品的事件?,如何選擇由其他因素決定:耦合內(nèi)聚,控制器: Example (cont),確定系統(tǒng)事件應(yīng)該分配給一個(gè)還是多個(gè)控制器,第一類控制器:Façade Controller,表示整個(gè)系統(tǒng)例: Register, RetailInformationSystem, Switch, Router, NetworkIn
17、terfaceCard etc.適用于下面情況只有較少的系統(tǒng)事件,第二類控制器:Use Case Controller,某個(gè)特定用例的所有事件操作定義在同一個(gè)用例控制器中。適用于:不將操作分離將會(huì)違背耦合和內(nèi)聚的原則(例如:臃腫的控制器)擁有跨越不同子系統(tǒng)的大量事件。,實(shí)例,public class EnterItemAction extends Action{public ActionForward execute( A
18、ctionMapping mapping, ActionForm form...){Repository repository = .....;Register register = repository.getRegister();String txtId = ((SaleFo
19、rm)form).getItemID();String txtQty = ((SaleForm)form).getQuantity();ItemID id = Transformer.toItemID(txtID);int qty = Transformer.toInt(txtQty);register.enterItem(id,qty);}},控制器:優(yōu)點(diǎn),增加了可復(fù)用的構(gòu)件和插拔的潛力
20、。是將表示層和業(yè)務(wù)層分離的方法能夠把握用例的狀態(tài)保證系統(tǒng)操作是以一種合法的順序發(fā)生,控制器: 優(yōu)點(diǎn),用戶界面對(duì)象 (windows, applets)和表示層不應(yīng)該處理系統(tǒng)事件。處理系統(tǒng)事件是領(lǐng)域?qū)ο蟮穆氊?zé),:SaleJFrame,1:makeLineItem(),,,onEnterItem(),:Sale,,,,:SaleJFrame,1:enterItem(),,,onEnterItem(),:Register,,,,:Sa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GRASP55和GRASP65在介導(dǎo)高爾基體堆疊形成中的功能.pdf
- 資產(chǎn)評(píng)估的對(duì)象、職責(zé)范圍及風(fēng)險(xiǎn)防范
- 面向?qū)ο笤O(shè)計(jì)類和對(duì)象
- 基于對(duì)象關(guān)系映射的對(duì)象持久化模型的分析與設(shè)計(jì).pdf
- GRASP算法在停機(jī)位優(yōu)化問題的應(yīng)用研究.pdf
- 面向?qū)ο笤O(shè)計(jì)
- 基于組件對(duì)象模型的CAD接口設(shè)計(jì).pdf
- Mousava——基于對(duì)象的操作系統(tǒng)設(shè)計(jì).pdf
- 基于UML的面向?qū)ο蟮姆治龊驮O(shè)計(jì).pdf
- 基于對(duì)象的存儲(chǔ)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于對(duì)象的存儲(chǔ)設(shè)備
- 基于對(duì)象的視頻摘要系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于語義對(duì)象報(bào)表工具的研究設(shè)計(jì).pdf
- 基于設(shè)計(jì)模式的面向?qū)ο笙到y(tǒng)再工程.pdf
- 面向?qū)ο笤O(shè)計(jì)原則
- 面向?qū)ο笤O(shè)計(jì)課程設(shè)計(jì)--- 基于uml的超市進(jìn)貨管理系統(tǒng)設(shè)計(jì)
- 設(shè)計(jì)部職責(zé)
- 基于運(yùn)動(dòng)對(duì)象的視頻摘要系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于學(xué)習(xí)對(duì)象的網(wǎng)絡(luò)課程設(shè)計(jì)與開發(fā).pdf
- 基于面向?qū)ο蠹夹g(shù)的監(jiān)控代理設(shè)計(jì)和實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論