版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第18章使用GRASP的對(duì)象設(shè)計(jì)例如
ObjectDesignExampleswithGRASP學(xué)習(xí)目標(biāo)設(shè)計(jì)用例實(shí)現(xiàn).應(yīng)用GRASP為類分配職責(zé)應(yīng)用UML闡述和思考對(duì)象設(shè)計(jì)圖18-1制品關(guān)系、強(qiáng)調(diào)用例實(shí)現(xiàn)用例實(shí)現(xiàn)〔UseCaseRealizations〕
用例實(shí)現(xiàn)描述如何按對(duì)象的協(xié)作將一個(gè)特定的用例實(shí)現(xiàn)為設(shè)計(jì)模型用例實(shí)現(xiàn)反映用例表達(dá)的需求與滿足需求的對(duì)象設(shè)計(jì)之間的關(guān)系
UML交互圖是表示用例實(shí)現(xiàn)的一種通用語言用例實(shí)現(xiàn)〔UseCaseRealizations〕的UML圖ProcessSale(from<UseCaseName>)ProcessSale<<use-caserealization>><<realize>>用例實(shí)現(xiàn)與UP制品的關(guān)系用例文本指出了SSD中所示的系統(tǒng)操作系統(tǒng)操作可以成為輸入到領(lǐng)域?qū)咏换D的控制器中的起始消息初學(xué)者容易忽略這個(gè)關(guān)鍵點(diǎn)領(lǐng)域?qū)咏换D闡述了對(duì)象如何交互以完成所需任務(wù)-用例實(shí)現(xiàn)系統(tǒng)操作與通信圖圖18-2通信圖和系統(tǒng)操作的處理系統(tǒng)操作與順序圖圖18-3順序圖和系統(tǒng)操作圖關(guān)鍵點(diǎn):將SSD中的系統(tǒng)操作作為領(lǐng)域?qū)涌刂茖?duì)象的起始消息操作:enterItem(itemID:ItemID,quantity:integer)交叉引用:用例:處理銷售前置條件:有正在進(jìn)行的銷售后置條件:創(chuàng)立SalesLineItem的實(shí)例sli(創(chuàng)立實(shí)例)……
操作契約和用例實(shí)現(xiàn)可以根據(jù)用例文本或某人的領(lǐng)域知識(shí)來設(shè)計(jì)用例實(shí)現(xiàn)。但對(duì)復(fù)雜的系統(tǒng)操作,需要編寫操作契約操作契約CO2:enterItem圖18-4滿足契約后置條件的局部交互圖操作契約的實(shí)現(xiàn)操作:makeNewSale()交叉引用:用例:處理銷售前置條件:無后置條件:-創(chuàng)立了Sale的實(shí)例s(創(chuàng)立實(shí)例).-s被關(guān)聯(lián)到Register(形成關(guān)聯(lián)).-s的屬性被初始化(修改屬性).如何設(shè)計(jì)makeNewSale:RegistermakeNewSale1:???()操作契約CO1:makeNewSale()系統(tǒng)操作makeNewSale的實(shí)現(xiàn)方案選擇Register作為控制器類創(chuàng)立Sale的一個(gè)新的實(shí)例s建立s與Register的關(guān)聯(lián)初始化s的屬性(包括創(chuàng)立SalesLineItem的一個(gè)對(duì)象集)可供選擇的控制器類代表整個(gè)系統(tǒng)的設(shè)備或子系統(tǒng)的控制器:Register,POSSystem代表處理或接受一個(gè)用例場(chǎng)景的所有系統(tǒng)事件的控制器:ProcessSaleHandler,ProcessSaleSession圖18-5應(yīng)用GRASP控制器模式由誰來創(chuàng)立Sale和SalesLineItem的對(duì)象?實(shí)際上,從領(lǐng)域模型可知:Register知道Sale類的信息,Sale知道SalesLineItem類的信息。按照創(chuàng)立者模式,可由Register負(fù)責(zé)創(chuàng)立Sale類的對(duì)象,由Sale負(fù)責(zé)創(chuàng)立SalesLineItem類的對(duì)象集。Sale和集合的創(chuàng)立創(chuàng)立一個(gè)新的sale實(shí)例s的屬性初始化創(chuàng)立一個(gè)對(duì)象集(容器)圖18-6Sale和集合的創(chuàng)立操作:enterItem(itemID:ItemID,quantity:Integer)交叉引用:用例:處理銷售前置條件:有正在進(jìn)行銷售后置條件:-創(chuàng)立了SalesLineItem的實(shí)例sli(實(shí)例創(chuàng)立).-sli被關(guān)聯(lián)到當(dāng)前的sale(形成關(guān)聯(lián)).-sli.quantity賦值為quantity.〔修改屬性〕-基于itemID的匹配,sli被關(guān)聯(lián)到productSpecification(形成關(guān)聯(lián)).如何設(shè)計(jì)enterItem操作契約CO2:enterItem:RegisterenterItem()1:???()系統(tǒng)操作enterItem的實(shí)現(xiàn)方案討論1系統(tǒng)操作契約的要求:已經(jīng)存在一個(gè)對(duì)象s。創(chuàng)立SalesLineItem的一個(gè)新的實(shí)例sli,將它放進(jìn)在前面創(chuàng)立的SalesLineItem對(duì)象集。建立s與sli之間的關(guān)聯(lián)。根據(jù)系統(tǒng)操作的輸入?yún)?shù)quantity修改sli的quantity屬性。sli基于itemID關(guān)鍵字與productSpecification建立關(guān)聯(lián)。系統(tǒng)操作enterItem的實(shí)現(xiàn)方案討論2選擇Register作為控制器類暫不考慮顯示商品說明與價(jià)格〔根據(jù)模型/視圖別離的設(shè)計(jì)原那么〕只需獲得相關(guān)信息。查找產(chǎn)品說明ProductSpecifications。發(fā)送消息給產(chǎn)品目錄ProductCatalog,用以查找產(chǎn)品說明ProductSpecifications。因?yàn)楫a(chǎn)品目錄包含了所有的產(chǎn)品說明信息。假設(shè)在StartUP用例實(shí)現(xiàn)中創(chuàng)立Register和ProductCatalog的實(shí)例,兩個(gè)實(shí)例間建立了永久的關(guān)聯(lián)。假設(shè)產(chǎn)品說明ProductSpecifications都在內(nèi)存,暫不考慮從數(shù)據(jù)庫恢復(fù)ProductSpecifications的問題。查找產(chǎn)品說明的消息是發(fā)送給對(duì)象集的消息。綜合上述討論,基于GRASP設(shè)計(jì)模式,考慮實(shí)現(xiàn)enterItem的對(duì)象設(shè)計(jì)。enterItem交互圖,動(dòng)態(tài)視圖圖18-7enterItem交互圖,動(dòng)態(tài)視圖圖18-8和enterItem設(shè)計(jì)有關(guān)的局部DCD,靜態(tài)視圖和enterItem設(shè)計(jì)有關(guān)的局部DCD,靜態(tài)視圖操作:endSale()交叉引用:用例:處理銷售前置條件:正在進(jìn)行的銷售后置條件:-Sale.isComplete被設(shè)置為真〔修改屬性〕系統(tǒng)操作endSale的實(shí)現(xiàn)操作契約CO3:endSale:RegisterendSale()1:???()系統(tǒng)操作endSale的實(shí)現(xiàn)方案討論選擇Register作為控制器類。更新Sale對(duì)象的信息isCompete=true考慮到“處理銷售〞用例文本的場(chǎng)景,要求計(jì)算稅后銷售總金額〔將用于顯示〕。由于模型/視圖別離設(shè)計(jì)原那么,暫不考慮顯示總金額的設(shè)計(jì)。主成功場(chǎng)景:3.收銀員輸入商品工程標(biāo)識(shí)。4.系統(tǒng)逐條記錄出售的商品工程,并……收銀員重復(fù)3-4步,直到結(jié)束。5.系統(tǒng)顯示總額和所計(jì)算的稅金圖18-9完成商品工程的輸入完成商品工程的輸入分析計(jì)算銷售總金額的設(shè)計(jì)指出誰有知道銷售總金額的職責(zé)。推導(dǎo)出銷售總金額是所有銷售商品小計(jì)的和。銷售商品小計(jì):=商品數(shù)量*單價(jià)。列出滿足職責(zé)所需的信息和知道這些信息的類。陳述職責(zé)概括所需信息列出知道信息的類計(jì)算銷售總額所需信息信息專家商品單價(jià)ProductDescription.priceProductDescription商品數(shù)量SalesLineItem.quantitySalesLineItem銷售商品小計(jì)SalesLineItem.subtotalSalesLineItem所有當(dāng)前Sale中的SalesLineItemSale獲取銷售總額圖18-10Sale.getTotal交互圖圖18-11在注解符號(hào)中表示方法在注解符號(hào)中表示方法操作:makePayment(amount:Money)交叉引用:用例:處理銷售前置條件:有正在進(jìn)行的銷售后置條件:-創(chuàng)立了Payment的實(shí)例p(創(chuàng)立實(shí)例).-p.amountTendered被賦值為amount〔修改屬性).-p被關(guān)聯(lián)到當(dāng)前的Sale〔形成關(guān)聯(lián)〕-當(dāng)前Sale被關(guān)聯(lián)到store(形成關(guān)聯(lián))。(以便將已完成的sale添加到歷史紀(jì)錄).系統(tǒng)操作makePayment的實(shí)現(xiàn)操作契約CO4:makePayment:RegistermakePayment()1:???()系統(tǒng)操作makePayment的實(shí)現(xiàn)方案討論選擇Register作為控制器類創(chuàng)立Payment的一個(gè)實(shí)例記錄已完成銷售Sale的日志計(jì)算支付余額〔將用于顯示〕圖18-3Register.makePayment的交互圖Register.makePayment的交互圖圖18-14誰應(yīng)該負(fù)責(zé)獲知已完成的銷售誰應(yīng)該負(fù)責(zé)獲知已完成的銷售圖18-15在日志中記錄已完成的銷售在日志中記錄已完成的銷售圖18-16Sale.getBalance的交互圖計(jì)算余額圖18-17反映了更多設(shè)計(jì)決策的更為完整的DCDNextGen迭代1最終的DCD系統(tǒng)初始化和“啟動(dòng)〔startUP〕〞用例何時(shí)創(chuàng)立初始化的設(shè)計(jì)--準(zhǔn)那么:最后完成初始化的設(shè)計(jì)如何完成應(yīng)用的啟動(dòng)--創(chuàng)立一個(gè)初始領(lǐng)域?qū)ο蟆瞚nitialdomainobject〕。java應(yīng)用中用的是main()方法“啟動(dòng)〔startUP〕〞用例系統(tǒng)操作的解釋--在一個(gè)交互圖中,發(fā)送create()消息用以創(chuàng)立起始的領(lǐng)域?qū)ο筮M(jìn)行初始化;〔初始化完成后,控制返回GUI〕。--〔可選〕如果這個(gè)起始的領(lǐng)域?qū)ο笸瑫r(shí)獲得進(jìn)程控制權(quán),那么在第二個(gè)交互圖中,發(fā)送run()消息〔或其他等價(jià)的消息〕給這個(gè)起始對(duì)象。設(shè)計(jì):store.create()創(chuàng)立Store、register,productCatalog和productSpecification對(duì)象;建立productCatalog與productSpecification間的關(guān)聯(lián);建立store與productCatalog間的關(guān)聯(lián);建立store與register間的關(guān)聯(lián);建立register與productCatalog間的關(guān)聯(lián)。Store作為初始領(lǐng)域?qū)ο?,?fù)責(zé)以下有關(guān)的創(chuàng)立和初始化工作。初始領(lǐng)域?qū)ο蠹捌浜罄^領(lǐng)域?qū)ο蟮膭?chuàng)立圖18-20初始領(lǐng)域?qū)ο蠹捌浜罄^領(lǐng)域?qū)ο蟮膭?chuàng)立從用戶界面層到領(lǐng)域?qū)舆B接的考慮用戶界面〔UI〕層不應(yīng)承擔(dān)對(duì)領(lǐng)域?qū)ο筇幚淼穆氊?zé),只負(fù)責(zé)用戶界面層的任務(wù),例如更新窗口內(nèi)容等。用戶界面〔UI〕層將所有面向領(lǐng)域?qū)拥恼?qǐng)求轉(zhuǎn)發(fā)給領(lǐng)域?qū)樱深I(lǐng)域?qū)觼硖幚磉@些請(qǐng)求。在領(lǐng)域?qū)釉O(shè)計(jì)一個(gè)控制器對(duì)象接受用戶界面對(duì)領(lǐng)域?qū)拥恼?qǐng)求。創(chuàng)立用戶界面對(duì)象的同時(shí),應(yīng)建立用戶界面對(duì)象到控制器對(duì)象的連接。用戶界面層對(duì)象獲得領(lǐng)域?qū)訉?duì)象可見性的的設(shè)計(jì)初始化例程〔例如,Java的main方法〕創(chuàng)立一個(gè)UI和一個(gè)領(lǐng)域?qū)ο?,將領(lǐng)域?qū)ο髠鬟f給UI?;蛘哂蒛I對(duì)象通過一個(gè)負(fù)責(zé)創(chuàng)立領(lǐng)域?qū)ο蟮腇actory對(duì)象創(chuàng)立領(lǐng)域?qū)ο?。publicclassMain{publicstaticvoidmain(String[]args){Storestore=newStore();//創(chuàng)立初始的領(lǐng)域?qū)ο驲egisterregister=store.getRegister();//由初始的領(lǐng)域?qū)ο髣?chuàng)立控制器對(duì)象ProcessSaleJFrameframe=newProcessSaleJFrame(register);//創(chuàng)立一個(gè)窗口對(duì)象,同時(shí)建立與控制器對(duì)象的連接
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場(chǎng)疫情期間顧客管理制度
- 商業(yè)地產(chǎn)停車場(chǎng)應(yīng)急管理預(yù)案
- 建筑工地腳手架施工安全方案
- 信息技術(shù)領(lǐng)域合同工薪資制度
- 供應(yīng)鏈管理中的物流整合方案
- 信息技術(shù)產(chǎn)業(yè)園區(qū)投資方案
- 2024-2030年中國衣服柔順劑行業(yè)營銷模式及發(fā)展競爭力分析報(bào)告
- 2024-2030年中國航空城行業(yè)創(chuàng)新策略分析及未來發(fā)展規(guī)劃研究報(bào)告
- 2024-2030年中國聚酰胺行業(yè)發(fā)展趨勢(shì)及投資可行性研究報(bào)告
- 基坑降水施工方案的環(huán)境影響評(píng)估
- GB/T 19973.1-2023醫(yī)療保健產(chǎn)品滅菌微生物學(xué)方法 第1部分:產(chǎn)品上微生物總數(shù)的確定
- ISO27001信息安全管理體系整套資料匯編
- 鑒賞家-教學(xué)講解課件
- 5.11.互聯(lián)網(wǎng)上網(wǎng)服務(wù)營業(yè)場(chǎng)所安全審查意見書
- 注塑成型參數(shù)條件表
- 苯-甲苯二元混合液連續(xù)精餾的工藝設(shè)計(jì)和塔設(shè)備設(shè)計(jì)-化工課程設(shè)計(jì)
- 普通話考試說話題談?wù)劼殬I(yè)道德
- 撬裝式加油站安全操作規(guī)程
- 認(rèn)識(shí)實(shí)習(xí)任務(wù)書土木工程
- 業(yè)主警告物業(yè)管理公司的致物業(yè)管理公司告知函
- 傷口換藥操作技術(shù)
評(píng)論
0/150
提交評(píng)論