版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、4.2UML包圖4.2.1 UML中的包圖3.3 .UM葉的包和包圖(PackageDiagram)一個(gè)企業(yè)應(yīng)用系統(tǒng)中可能包含數(shù)百個(gè)類(lèi),如何有效地管理這些類(lèi)就成了一個(gè)需要解決的問(wèn)題。一種有效的管理方式是將類(lèi)分組,功能相似或相關(guān)的類(lèi)組織在一起,形成功能模塊或者子系統(tǒng)。在各種面向?qū)ο蟮木幊陶Z(yǔ)言中都提供了對(duì)類(lèi)進(jìn)行分類(lèi)管理的機(jī)制一一如Java語(yǔ)言的包(Package),而在UML中,對(duì)類(lèi)或者其他的模型元素進(jìn)行分組時(shí)則使用包圖。(1)包圖是保持系統(tǒng)整體結(jié)構(gòu)簡(jiǎn)明、清晰的重要工具。在RationalRose中對(duì)包采用類(lèi)似于文件夾的符號(hào)來(lái)表示(如圖4.19所示的“留言功能包”、“用戶權(quán)限管理包”),并且一個(gè)包
2、可嵌套在另一個(gè)包中形成子包。使用包圖可以將相關(guān)模型元素分組,包圖由包和包之間的關(guān)系構(gòu)成,它是維護(hù)和控制系統(tǒng)總體結(jié)構(gòu)(系統(tǒng)架構(gòu))的重要建模工具。(2)在RationalRose2003中的包圖是通過(guò)類(lèi)圖來(lái)體現(xiàn)的。如果某個(gè)包為其他包的子包,則應(yīng)該將子包放入父包中,如圖4.19所示。LacictlViw口智宮功費(fèi)包I羊q百宙KD總西費(fèi)第冏KD修西成功,+-KD各告失敗KD留言顯示基類(lèi)困6用尸曾再三Atioeia用尸枚隈管理也困。用戶信息也I日Utia-Anocittionx司M.in討各個(gè)包之間的關(guān)系包由司用PW音類(lèi)圖相用戶留言模塊的腴序由|*用戶*宮模塊的賬序圖rAiiocittion?用戶權(quán)限管
3、理包用戶信息包(from用戶權(quán)限管理包)圖4.19RationalRose2003中的包圖是通過(guò)類(lèi)圖來(lái)體現(xiàn)的4.4 .包之間的關(guān)系及其UMLB示在設(shè)計(jì)包時(shí),首先要決定系統(tǒng)中應(yīng)該有哪些包,比如要盡量將系統(tǒng)中不穩(wěn)定的模型元素和相對(duì)穩(wěn)定的模型元素分配到不同包中,以提高軟件系統(tǒng)的可維護(hù)性;或者將可選功能和核心功能實(shí)現(xiàn)分置于不同的包或子包之中。其次決定包之間的關(guān)系,包之間存在兩種關(guān)系:依賴和泛化(繼承或者構(gòu)成)。下面分別介紹這兩種關(guān)系,以及它們?cè)赗ationalRose中的具體實(shí)現(xiàn)。(1)包之問(wèn)的依賴關(guān)系。如果對(duì)類(lèi)A的修改會(huì)導(dǎo)致類(lèi)B的改變,則稱B依賴于Ao如果兩個(gè)包中存在具有依賴關(guān)系的兩個(gè)類(lèi),則認(rèn)為這兩
4、個(gè)類(lèi)所屬的兩個(gè)包之間則存在著依賴關(guān)系。圖4.19所示的“留言功能包”和“用戶權(quán)限管理包”之間存在依賴。包之間的依賴關(guān)系應(yīng)盡量簡(jiǎn)單、稀疏,通常要求某一包中的模型元素只與同層及相鄰下一層的模型元素之間存在依賴關(guān)系。(2)包之間的泛化關(guān)系。包之間的泛化關(guān)系其實(shí)更多的是指包之間的構(gòu)成關(guān)系,也就是指在某個(gè)包中嵌套包含其他的包,即包中不僅可包含類(lèi)等模型元素,還可以包含子包。圖4.19所示的“用戶權(quán)限管理包”中包含有“用戶信息包”,稱“用戶信息包”為“用戶權(quán)限管理包”中的子包。5.5 .包圖的應(yīng)用目的(1)能夠體現(xiàn)系統(tǒng)的層次關(guān)系。使用包圈的目的是把模型元素組織成組或者集合并為其命名,以便作為一個(gè)整體進(jìn)行處理
5、。對(duì)于一個(gè)大型的軟件系統(tǒng),使用包來(lái)組織大量模型元素以便于系統(tǒng)的理解和處理,使之有很好的層次關(guān)系。(2)通過(guò)包可以形成一個(gè)高內(nèi)聚、低耦合的類(lèi)的集合。(3)在概要設(shè)計(jì)階段,設(shè)計(jì)人員可以用包圖來(lái)建立軟件系統(tǒng)的體系架構(gòu)。 RationalRose2003對(duì)UML包圖的支持.設(shè)計(jì)項(xiàng)目包圖中的各個(gè)包(1)新建項(xiàng)目中的各個(gè)包。右擊LogicalView的節(jié)點(diǎn),在彈出的快捷菜單中選擇【New,然后再選擇【Package】菜單項(xiàng),如圖4.20所示。1Hit圖4.20新建項(xiàng)目中的各個(gè)包(2)命名該包圖。輸入包的名稱為“表示層包”,如圖4.20所示的輸入圖示。(3)根據(jù)具體的應(yīng)用要求設(shè)計(jì)其子包。當(dāng)然也可以在該包的基
6、礎(chǔ)上再產(chǎn)生出其子包,如圖4.21所示。百F.e土“.Hi*rBLt薩*BBS累蚯LJUitC工Vis白LfrfictlVa*BfiblJ*卡E由j*tElg|otg值|LlaDiagrdfiii:口jCiV,l&Dtploynrat|liri.TPrup.系mLgaa&tiDm口郵口口田田圉rtckactMitrirchyLi(hdfcnociallonimAsxoci,tioni-口_mAllacIAtk.4AXl+j11Conp4ntnlVitwCFD1-DorJ-Jo.ust皿口的由窗口口門(mén)口目一,二也3a3+3田田&S:ZJ圖4.22分別設(shè)計(jì)其他的各個(gè)子包.設(shè)計(jì)項(xiàng)目中的包圈(1)新建一
7、個(gè)包圖。右擊【LogicalView的節(jié)點(diǎn),在彈出的快捷菜單中選擇【New,然后再選擇【classDiagram菜單項(xiàng),如圖4.23所示。蛆B監(jiān)系攜1UstCtseFitw移uaAs1f。噌itiionsTTi811曲TJ3J.Fcst-“Jflr表控?cái)?shù)業(yè)Ftu,治自電口cl口口sr囹囹赳3tl*JDataMadeJetQukyArchitect圖蹦系蜿二iZZiVieCtstView陛IH睢nMAei-ositildm-口“IE衽Vl*W圖:|JJYL*1JfeYUC玉r*JQFf十口豪示層包*Ui控制度+口野褐詩(shī)河尾王口業(yè)務(wù)居3PackatMbermfchy目Lfrfcndi二Axsaci
8、4tk4M.國(guó)我物tmiM:圖4.23設(shè)計(jì)項(xiàng)目中的包圈(2)命名該包圖。輸入包圖的名稱為“BBS系統(tǒng)前臺(tái)包圖”,如圖4.23所示。(3)在該包圖中分別添加各個(gè)不同的包。將需要的各個(gè)包從左側(cè)的層次樹(shù)拖動(dòng)到右側(cè)的包圖中,如圖424所示。BBS項(xiàng)目*C|VxtVitw!-口|LccicklVitwEBS前臺(tái)注明Glob*lDtitjtvtjavaxOM_dbo0f圖4.24在該包圈中分別添加各個(gè)不同的包(4)決定各個(gè)包之問(wèn)的組成關(guān)系。4.25所示。3B腮項(xiàng)目+UstC*wViGlobaljtvuOHdbflor5SchttntiutilA.我示層包ViewHelp(from表示層包自定義的標(biāo)簽rum
9、表示層包)JSP頁(yè)面由ci儂示層包,根據(jù)系統(tǒng)層次劃分的要求,分別添加各個(gè)不同的包所對(duì)應(yīng)的子包,如圖圖4.25分別添加各個(gè)不同的包所對(duì)應(yīng)的子包(5)設(shè)計(jì)完成后的結(jié)果如圖4.26所示。持久類(lèi)包.數(shù)據(jù)飾問(wèn)層)I異常處理包ffTUE數(shù)據(jù)巧問(wèn)星)圖4.26項(xiàng)目巾的各個(gè)包及對(duì)應(yīng)的包圖.設(shè)置項(xiàng)目包圖內(nèi)各個(gè)包之問(wèn)的依賴關(guān)系包與包之間的依賴關(guān)系是由包中的類(lèi)與另一個(gè)包中的類(lèi)是否存在關(guān)聯(lián)關(guān)系來(lái)決定的,不允許包與包之間直接發(fā)生相互依賴。因此,如果在系統(tǒng)層次劃分的過(guò)程中發(fā)現(xiàn)有這樣的依賴關(guān)系存在,那就說(shuō)明項(xiàng)目系統(tǒng)中包的設(shè)計(jì)有問(wèn)題,需要考慮將這兩個(gè)包合并或重新分配包中的類(lèi)。比如,如果有A包和B包,A包與B包產(chǎn)生泛化關(guān)系,那
10、就不允許出現(xiàn)B包依賴A包的情況。本項(xiàng)目示例中各個(gè)包之間的依賴關(guān)系如圖4.27所示,不僅要確定包與包之間的依賴關(guān)系,還應(yīng)確定某個(gè)包的各個(gè)組成包之間的依賴關(guān)系。圖4.27BBS論壇項(xiàng)目的最終包圖 網(wǎng)上商城項(xiàng)目的架構(gòu)包圖由于在3.3.4節(jié)有關(guān)剛上商城項(xiàng)目的系統(tǒng)架構(gòu)設(shè)計(jì)示例中,已經(jīng)具體給出了網(wǎng)上商城項(xiàng)目的架構(gòu)包圖。在此不再重復(fù)列出,請(qǐng)參見(jiàn)圖3.11所示的架構(gòu)包圖。 BBS論壇項(xiàng)目的架構(gòu)包圖BBS論壇項(xiàng)目系統(tǒng)的整體架構(gòu)設(shè)計(jì)采用的是DWR+Struts+Spring+Hibernate等框架架構(gòu)組成,同時(shí)整個(gè)系統(tǒng)被分為4層一一表示層、控制層、業(yè)務(wù)處理層和持久層。其中在表示層和控制層中應(yīng)用Struts框架技
11、術(shù)。而在業(yè)務(wù)處理層中則應(yīng)用了Spring框架技術(shù),在系統(tǒng)的持久層中采用Hibernate框架來(lái)達(dá)到O/RMapping的效果。具體的架構(gòu)包圖如圖4.27所示。4.3UML類(lèi)圖UML中的類(lèi)圖UMLfe圖(1)類(lèi)圖。類(lèi)是面向?qū)ο竽P妥罨镜哪P驮?。?lèi)圖表達(dá)了實(shí)現(xiàn)某用例中一組對(duì)象類(lèi)之間的靜態(tài)結(jié)構(gòu),以及它們之間的聯(lián)系和交互關(guān)系:并且類(lèi)圖還用來(lái)模擬開(kāi)發(fā)中的實(shí)際代碼,而且有許多LJML,建模工具(如RationalRose等)可以直接根據(jù)IJMI_。類(lèi)圖生成目標(biāo)語(yǔ)言的類(lèi)程序代碼,或者實(shí)施反向工程,讀取類(lèi)的源代碼文件,創(chuàng)建出新的類(lèi)圖。(2)類(lèi)圖的作用。類(lèi)圖的作用主要體現(xiàn)在描述系統(tǒng)的靜態(tài)結(jié)構(gòu)和關(guān)系上,因?yàn)樗?/p>
12、不僅定義系統(tǒng)需要的各個(gè)類(lèi),還能夠表示類(lèi)之間的關(guān)系(關(guān)聯(lián)、依賴、聚合和泛化等),還包括類(lèi)的內(nèi)部結(jié)構(gòu)(類(lèi)的屬性和操作)的定義和描述。(3)類(lèi)與類(lèi)之問(wèn)的關(guān)系。類(lèi)與類(lèi)之間的關(guān)系分為兩種不同的形式:結(jié)構(gòu)性關(guān)系(靜態(tài)組成關(guān)系)和行為性關(guān)系(動(dòng)態(tài)交互關(guān)系)。結(jié)構(gòu)性關(guān)系主要指父類(lèi)與子類(lèi)間的泛化/特化(類(lèi)之間的繼承與派生),類(lèi)與類(lèi)之間的關(guān)聯(lián)和依賴、聚合和組合等關(guān)系。行為性關(guān)系指類(lèi)之間可以通過(guò)消息聯(lián)系,通過(guò)系統(tǒng)預(yù)定義或用戶自定義的語(yǔ)義聯(lián)系。2.類(lèi)的UMLB示(1)在UML中,類(lèi)的圖形表示為實(shí)線矩形框。類(lèi)是對(duì)象的集合,這些對(duì)象有共同的結(jié)構(gòu)特征、行為特征、聯(lián)系和語(yǔ)義;但要注意的是:在類(lèi)圖中不一定要列出全部的成員(屬性
13、和方法)內(nèi)容。如在建立分析模型或設(shè)計(jì)模型時(shí),可以只列出類(lèi)名,在模型中著重表達(dá)類(lèi)之間的聯(lián)系;而在建立實(shí)現(xiàn)模型時(shí),則在類(lèi)圖中給出屬性和操作等詳細(xì)的成員內(nèi)容。在RationalRose2003中對(duì)類(lèi)及成員定義的支持如圖4.28所示。UserlnfoVOuserNanie:SiringskinCmor:ColorgetlJserName():StnngsetUserName(newUserName:Slring):vo!dgutSkinColor。:Color圖4.28類(lèi)的UML圖示及類(lèi)中成員的圖示(2)類(lèi)的屬性成員及其UML圖示。屬性體現(xiàn)類(lèi)的對(duì)象所在的狀態(tài)性質(zhì),在類(lèi)圖中用文字串說(shuō)明。其表示方式如下:
14、可視性屬性名(多重性):類(lèi)型=初始值可視性用可視性標(biāo)記表示:公共(e)、保護(hù)(國(guó))、私有()。類(lèi)型(即數(shù)據(jù)類(lèi)型)依賴于選擇的工具語(yǔ)言,例如下面為在RationalRose2003中表示數(shù)據(jù)類(lèi)型為String的userName成員屬性。userNanie:String(3)類(lèi)中的靜態(tài)(static)成員屬性及其UML圖示。應(yīng)該注意的是,類(lèi)的靜態(tài)成員屬性也就是static成員屬性在類(lèi)圖中的表示為帶下劃線的形式。(4)類(lèi)中的方法成員及其UML圖示。操作(方法)是類(lèi)的行為特征或動(dòng)態(tài)特征,用于對(duì)服務(wù)或?qū)嶓w相關(guān)的操作建模。一個(gè)類(lèi)可以有操作并且允許有多個(gè)操作,也可以沒(méi)有操作。沒(méi)有操作的類(lèi)經(jīng)常用于表達(dá)數(shù)據(jù)(如
15、業(yè)務(wù)實(shí)體組件類(lèi)或者持久組件類(lèi))。操作在類(lèi)圖中位于最底部,同時(shí)用文字串說(shuō)明。其表示如下:可視性操作名(參數(shù)列表):返回列表性質(zhì)3.類(lèi)之間的關(guān)系在面向?qū)ο箢I(lǐng)域中,各個(gè)類(lèi)之問(wèn)一般存在“關(guān)聯(lián)、繼承、聚合和組合”等形式的關(guān)系,據(jù)此,分析設(shè)計(jì)人員再對(duì)項(xiàng)目中的各個(gè)實(shí)體進(jìn)一步地分析,找出它們之間的各種關(guān)系。有關(guān)面向?qū)ο蠹夹g(shù)中類(lèi)之間關(guān)系的詳細(xì)介紹請(qǐng)讀者參考本書(shū)第l1章“對(duì)象/關(guān)系映射設(shè)計(jì)”中的有關(guān)內(nèi)容。(1)關(guān)聯(lián)(Association)關(guān)系。關(guān)聯(lián)是一種結(jié)構(gòu)化的關(guān)系,指一種對(duì)象和另一種對(duì)象有聯(lián)系。它是對(duì)具有共同結(jié)構(gòu)特性、行為特性、關(guān)系和語(yǔ)義鏈接的描述。在UML類(lèi)圖中,關(guān)聯(lián)用一條實(shí)線將類(lèi)連接在一起。如果是單向關(guān)聯(lián)
16、,則在關(guān)聯(lián)端加箭頭表示方向。在RationalRose工具中,如果是雙向關(guān)聯(lián),則不用雙向箭頭表示。具體參見(jiàn)圖4.29中的Computer與UserInfo之間的關(guān)聯(lián)關(guān)系的圖示。另外還應(yīng)該注意關(guān)聯(lián)的重?cái)?shù),由于關(guān)聯(lián)分為兩元關(guān)系和多元關(guān)系,兩元關(guān)系是指一對(duì)一的關(guān)系,多元關(guān)系是一對(duì)多或多對(duì)一的關(guān)系。并且在關(guān)聯(lián)端需要標(biāo)出關(guān)聯(lián)中的數(shù)量關(guān)系一一重?cái)?shù)(多重性)。關(guān)聯(lián)端的多重性規(guī)定了該類(lèi)中有多少個(gè)對(duì)象參與該關(guān)聯(lián),關(guān)聯(lián)分為“一對(duì)一”、一對(duì)多”、“多對(duì)一”和“多對(duì)多”關(guān)聯(lián)。常用的關(guān)聯(lián)關(guān)系如下:“0.1:表示0到1個(gè)對(duì)象。1:表不1個(gè)對(duì)象。0.*或者*:表示0到多個(gè)對(duì)象?!?.10”:表示1到10個(gè)對(duì)象。客戶和訂單之
17、間的關(guān)聯(lián)關(guān)系如果寫(xiě)成Java程序,則意味著在UserInfo類(lèi)中需要定義一個(gè)Order類(lèi)型的集合成員變量。同時(shí)Order類(lèi)應(yīng)該定義UserInfo類(lèi)的對(duì)象。例4-1是UserInfo類(lèi)和Order類(lèi)之間關(guān)聯(lián)關(guān)系的代碼示例。例4-1UserInfo類(lèi)和Order類(lèi)的定義代碼示例。PublicClassUserInfoprivateArrayListallOrders;客戶和訂單之間為一對(duì)多”關(guān)聯(lián)/UserInfo類(lèi)與ContactMethod類(lèi)之間為聚合關(guān)系privateContactMethodoneContactMethod;/,其他的代碼publicbooleanaddGoodsToCar
18、t(GoodsoneGoods)/UserInfo類(lèi)與Goods之間的關(guān)系為依賴關(guān)系將商品添加到購(gòu)物車(chē)中的代碼returntrue;publicclassOrderprivateUserInfosomeOneUser;/訂單和客戶之間為一對(duì)一”關(guān)聯(lián)publicvoidsetSomeOneUser(UserInfooneUserInfo)someOneUser=oneUserInfo;(2)依賴(Dependency)關(guān)系。依賴體現(xiàn)類(lèi)之問(wèn)的“使用和調(diào)用”關(guān)系,指特定事物的改變有可能影響使用該事物的事物,反之不成立。通常情況下,依賴關(guān)系體現(xiàn)在目標(biāo)類(lèi)的對(duì)象出現(xiàn)在局部變量或者方法的參數(shù)中以及靜態(tài)方法的
19、調(diào)用。依賴與關(guān)聯(lián)不同,依賴關(guān)系總是單向的。例如,某一個(gè)類(lèi)使用了另一個(gè)類(lèi)的對(duì)象作為操作方法中的參數(shù),則這兩個(gè)類(lèi)之問(wèn)就具有依賴關(guān)系;如果一個(gè)類(lèi)存取另一個(gè)類(lèi)中的全局對(duì)象以及一個(gè)類(lèi)調(diào)用另一個(gè)類(lèi)中類(lèi)作用域的操作方法,則這兩個(gè)類(lèi)之間也同樣具有依賴關(guān)系。依賴在UML圖示中用一個(gè)從客戶指向提供者的虛箭頭表示,具體請(qǐng)見(jiàn)圖4.29中的Computer與UserInfo之間的關(guān)聯(lián)關(guān)系的圖示。例4-1中的UserInfo類(lèi)與Goods之間的關(guān)系為依賴關(guān)系,用戶在購(gòu)買(mǎi)某個(gè)商品時(shí),addGoodsToCart的行為是依賴于Goods類(lèi)的。(3)聚合(Aggregation)關(guān)系。聚合表示事物的部分與整體的一種松散(比較弱
20、)的對(duì)象間關(guān)系,即A對(duì)象可以包含B對(duì)象,但B對(duì)象不一定是A對(duì)象的組成部分。比如計(jì)算機(jī)和它的外圍設(shè)備就是一例,再比如汽車(chē)和停車(chē)場(chǎng)之間的關(guān)系,停車(chē)場(chǎng)中有汽車(chē),但汽車(chē)不是停車(chē)場(chǎng)的一部分,汽車(chē)和停車(chē)場(chǎng)之間沒(méi)有整體和一般的關(guān)系。聚合關(guān)系在UM.中的表示法為在關(guān)聯(lián)線端加一個(gè)小空心菱形,菱形連接處代表整體事物類(lèi),稱為聚合類(lèi),另一端連接處代表部分事物類(lèi)。給例4-1中的UserInfo類(lèi)添加一個(gè)聯(lián)系方式的對(duì)象oneContactMethod,此時(shí)UserInfo類(lèi)與ContaetMethod類(lèi)之間應(yīng)該為聚合。為什么不將它們看成關(guān)聯(lián)呢?因?yàn)閁serInfo應(yīng)該擁有或者包含一個(gè)聯(lián)系方式,將“用戶”與“聯(lián)系方式”不是
21、平等地看待,而是作為“整體”和局部”來(lái)看待。同時(shí),UserInfo與ContaetMethod之間不存在物理上的包含和組成的關(guān)系。如果將“用戶”與“聯(lián)系方式”平等(同級(jí)別)地看待,它們兩者之間就應(yīng)該是關(guān)聯(lián)關(guān)系。參見(jiàn)例4-1中的代碼示例。在RationalRose2003中則通過(guò)【ByReference的方式進(jìn)行引用,如圖4.29所示。DiilavrlntoHurdDiskByRet.隹fK.tcminulcr圖4.29在RationalRose2003中對(duì)聚合關(guān)系的支持(4)組合(Composition)關(guān)系。組合表示事物的部分與整體的一種緊密(比較強(qiáng))的對(duì)象問(wèn)關(guān)系,此時(shí),構(gòu)成整體類(lèi)的部分類(lèi)完
22、全屬于整體類(lèi),并且體現(xiàn)樹(shù)狀層次結(jié)構(gòu)的關(guān)系。在一個(gè)合成對(duì)象里,部分與整體的生命周期都是相同的。一個(gè)合成的新對(duì)象完全擁有對(duì)其組成部分的支配權(quán)。包括它們的創(chuàng)建和刪除(與代表整體的對(duì)象同時(shí)存在、消失)。如果沒(méi)有了整體類(lèi),則部分類(lèi)也沒(méi)有存在的價(jià)值,部分類(lèi)的存在是因?yàn)橛姓w類(lèi)的存在。組合的UMIL表示法為在關(guān)聯(lián)線端加一個(gè)小實(shí)心菱形,菱形連接處代表整體事物類(lèi),稱為組合類(lèi),另一連接處代表部分事物類(lèi)??梢詫⒔M合理解成強(qiáng)類(lèi)型的聚合。其實(shí)現(xiàn)的代碼示例,如例4-2所示。在RationalRose2003中則通過(guò)【ByValue菜單項(xiàng)進(jìn)行引用,如圖4.30所示。圖4.30在RationalRose2003中對(duì)組合關(guān)系的
23、支持例4-2組合關(guān)系的代碼示例。publicclassWindowprivateTitleBaroneTiltle;/在窗口中包含一個(gè)標(biāo)題條對(duì)象在窗口類(lèi)中包含一個(gè)標(biāo)題條對(duì)象。由于在物理構(gòu)成關(guān)系上,窗口是由標(biāo)題條等對(duì)象構(gòu)成的。因此,窗口類(lèi)和標(biāo)題條類(lèi)之間有很強(qiáng)的整體和部分的組成關(guān)系。(5)泛化(Generalization)關(guān)系。泛化與特化是現(xiàn)實(shí)世界中一般性實(shí)體與特殊性實(shí)體之間的關(guān)系,一般性實(shí)體是特殊性實(shí)體的泛化,特殊性實(shí)體是一般性實(shí)體的特化。類(lèi)與其子類(lèi)就具有這樣的關(guān)系。UML中的泛化體現(xiàn)了分類(lèi)與繼承原則,一個(gè)子類(lèi)繼承超類(lèi)的全部屬性、方法,子類(lèi)本身還可以有自己的子類(lèi),從而構(gòu)成復(fù)雜的一般與特殊的結(jié)構(gòu)
24、。泛化的UML表示形式關(guān)系圖示為一個(gè)帶空心三角形的直線,空心三角形緊挨著父類(lèi),如圖4.31所示的PCComputer與Computer之間的泛化關(guān)系圖示。但要注意抽象類(lèi)的表示形式,抽象類(lèi)或抽象操作的名稱用斜體字表示。關(guān)鍵字abstract可以放置在名稱下面或后面的特性表中。4.類(lèi)之間的關(guān)系實(shí)例在例4-3中,給出了一個(gè)表示對(duì)象之間各種關(guān)系的示例。其中的computer與CPU、HardDisk之間為組合關(guān)系,因?yàn)镃PU和HardDisk是Computer必備的組成部分;Computer與Printer之間為聚合關(guān)系,因?yàn)镻rinter并不是Computer的必備組成部件,而是可選的組成部件。Co
25、mputer與UserInfo(計(jì)算機(jī)的主人)之間為一對(duì)一”的關(guān)聯(lián)關(guān)系,Computer與Data之間為依賴關(guān)系,計(jì)算機(jī)在進(jìn)行計(jì)算時(shí)依賴十需要進(jìn)行計(jì)算處理的目標(biāo)數(shù)據(jù);PCComputer與Computer之間為泛化關(guān)系,并且其中的Computer類(lèi)為抽象類(lèi)。例4-3類(lèi)之間各種關(guān)系的示例。abstractclassComputerprivateCPUintelCPU=nuli2-Computer與CPU,HaMDisk之間為組合關(guān)系publicResultcalculateiDat*oneData(/對(duì)基類(lèi)中的calculate方法進(jìn)行重有、ST匚二+上空Computer與Data之可為依賴關(guān)系
26、)classCPUclassHardbisk()classPrinter(classUserInfo(UML類(lèi)圖如圖4.31所示,注意在RationalRose例4-3中的各個(gè)類(lèi)之間的關(guān)系對(duì)應(yīng)的工具中聚合和組合表示形式的不同點(diǎn)。圖4.31例4-3中類(lèi)之間的各種關(guān)系示例對(duì)應(yīng)的UML類(lèi)圖4.3.2RationalRose2003對(duì)UML類(lèi)圖的支持.添加某項(xiàng)目中與數(shù)據(jù)訪問(wèn)層組件相關(guān)的各個(gè)類(lèi)(1)新建項(xiàng)目中的一個(gè)類(lèi)。New,然右擊“LogicalView”的節(jié)點(diǎn)下某個(gè)包的節(jié)點(diǎn),在彈出的快捷菜單中選擇【后再選擇【class菜單項(xiàng)。如圖4.32所示,輸入類(lèi)名稱以命名該類(lèi)。UtVCfiAVInhsrfftc
27、fl卜國(guó)用ilXgtf三,口韭器塞RemevePmWjs1擘目P.匚k.yHiflm4Qt目RB3箏晚二一工,unfad,yc*y圖4.32新建項(xiàng)目中的一個(gè)類(lèi)并命名該類(lèi)(2)分別在各個(gè)包中輸入各個(gè)類(lèi),最后結(jié)果如圖4.33所示。.添加本項(xiàng)目中與數(shù)據(jù)訪問(wèn)層組件相關(guān)的各個(gè)接口(1)在數(shù)據(jù)訪問(wèn)層包中新建一個(gè)接口。右擊“數(shù)據(jù)訪問(wèn)層”的包名稱節(jié)點(diǎn),在彈出的快捷菜單中選擇【New,然后再選擇Interface菜單項(xiàng),如圖4.33所示。LJ救塞訪問(wèn)患日UitranfEfttityBvtf(三AiiciiEoni琴雷,1E電M.r.t.eDHE.All$CI:LCJUhCut柄一-OfflKSKTffl值jmI
28、i*ljwvuI凰中依.if)口表示層,.*i白控蒯脖閘門(mén)船雷訪R圖口業(yè)務(wù)用.Fack(!FBBS累蛻圖4.34命名該接口3.設(shè)計(jì)數(shù)據(jù)訪問(wèn)組件對(duì)應(yīng)的類(lèi)圖圖4.35新建一個(gè)類(lèi)圖并命名該類(lèi)圖(2)生成一個(gè)空的類(lèi)圖。RationalRose最后將生成如圖4.36所示的一個(gè)空的類(lèi)圖。(1)新建一個(gè)類(lèi)圖。右擊“LogicalView”的節(jié)點(diǎn)下某個(gè)包的節(jié)點(diǎn),在彈出的快捷菜單中選擇【再選擇【classDiagram菜單項(xiàng),如圖4.35所示,輸入類(lèi)圖的名稱,比如為“問(wèn)組件的類(lèi)圖”。New,然后BBS數(shù)據(jù)訪三t-LJ豹科I作包bp.r.t.rDgfnAuf*4睢9OptrSohrmlDkH.。r口寡處理包日Hi
29、AJOExetp11oh三Ai&ocitiotii.Itgd-Jir*勺*IJjtvtx囹Qr*J11aSInfoEnti照用n.ieHnfoEnbr/Byan。必心Nt,圖4.39在RationalRose中還可以對(duì)JDK中的標(biāo)準(zhǔn)接日進(jìn)行實(shí)現(xiàn)定義(3)選擇JDK中的某個(gè)接口。比如選擇java.io.Serializable接口,如圖4.40所示。qliBSInlidntitBean0二業(yè)2小L一:-X)pcraierlHln(erfacc4TruinIjQtUscrltifoEntilyEic皿OperatefDBBuaqi-iH匕mConnectDBBcan|HibemlMeDAUEKce
30、ption|圖4.40選擇JDK中的java.io.Serializable接口(4)確定本項(xiàng)目中的某個(gè)類(lèi)與其對(duì)應(yīng)接口的實(shí)現(xiàn)關(guān)系。本項(xiàng)目中有UserlnfoEntityBean和BBSInfoEntityBean兩個(gè)實(shí)體類(lèi),這兩個(gè)類(lèi)需要滿足序列化的要求)因此它們需要實(shí)java.io.Serializable接口)如圖4.41所示。王口Vt*iv-OLaperalerDBInitrtaceUserlnfDl/ntitvBeaR所示。HibemulcDA()FxceptiorjJliidirechoTialAesocwIich|JHHuun戶RIZBI圖4.42在RationalRose中提供了對(duì)
31、類(lèi)之間的聚合關(guān)系的支持(2)右擊聚合關(guān)系中的總體端。右擊聚合關(guān)系中的總體端并在彈出的快捷菜單中選擇【Aggregate!菜單項(xiàng),如圖4.43所示。Serializable(fromioBBSInfoEntiyBean(peratcrDBInterface/Containnftentof0peraterDB8eanPublicProtectedPrtvateI珅1gmMtabonNa對(duì)的blegtatk:圖4.43右擊聚合關(guān)系中的總體端(3)選擇【Aggregate的關(guān)系類(lèi)型在彈出的快捷菜單中選擇【Aggregate菜單項(xiàng)后,將生成如圖4.44所示的狀態(tài)。圖4.44設(shè)置類(lèi)圖中各個(gè)類(lèi)之間的聚合關(guān)系
32、.設(shè)置類(lèi)圖中各個(gè)類(lèi)之間關(guān)聯(lián)關(guān)系的重?cái)?shù)(1)如果關(guān)系為關(guān)聯(lián)關(guān)系,則應(yīng)該進(jìn)一步設(shè)置關(guān)聯(lián)的重?cái)?shù)。Multiplicity菜單項(xiàng),然后根據(jù)具右擊靠近關(guān)聯(lián)的目標(biāo)方,在彈出的快捷菜單中選擇【體關(guān)聯(lián)的重?cái)?shù)選擇對(duì)應(yīng)的重?cái)?shù)的項(xiàng)目,如圖4.45所示。RrotwtfdlPrivateImpfefiwrtatiari圖4.45設(shè)置類(lèi)圖中各個(gè)類(lèi)之間關(guān)聯(lián)關(guān)系的重?cái)?shù)(2)最后將生成關(guān)聯(lián)關(guān)系的重?cái)?shù)。RationalRose工具將自動(dòng)地在關(guān)聯(lián)線上顯示出關(guān)聯(lián)關(guān)系重?cái)?shù)的狀態(tài)(0.*),如圖4.46所圖4.46設(shè)置類(lèi)圖中各個(gè)類(lèi)之問(wèn)的關(guān)聯(lián)關(guān)系(3)據(jù)此設(shè)置本項(xiàng)目中其他類(lèi)之間的關(guān)聯(lián)關(guān)系和重?cái)?shù)。最后結(jié)果如圖4.47所示。圖4.47設(shè)置項(xiàng)目
33、類(lèi)圖中其他各類(lèi)之間的關(guān)聯(lián)關(guān)系.設(shè)置類(lèi)圖中各個(gè)類(lèi)之間的依賴關(guān)系(1)在RationalRose中提供了對(duì)類(lèi)之間依賴關(guān)系的支持。4.48所示。nstdhtkates區(qū)分類(lèi)圖工具條中的各個(gè)關(guān)系按鈕,并找到體現(xiàn)依賴關(guān)系的按鈕,如圖圖4.48在RationalRose中提供了對(duì)類(lèi)之間依賴關(guān)系的支持(2)設(shè)置項(xiàng)目中的類(lèi)之間的依賴關(guān)系。根據(jù)應(yīng)用的狀態(tài)進(jìn)行定義和設(shè)置,如UserInfoManageBean類(lèi)依賴于UserInfoEntityBean類(lèi),而B(niǎo)BSInfoManageBean類(lèi)依賴于BBSInfoEntityBean類(lèi),如圖4.49所示。圖4.49定義和設(shè)置項(xiàng)日中類(lèi)之間的依賴關(guān)系4.3.3網(wǎng)上商城
34、項(xiàng)目的類(lèi)圖.表示層的類(lèi)圖項(xiàng)目表示層主要包括各個(gè)JSP頁(yè)面文件、各種標(biāo)簽庫(kù)標(biāo)簽(Struts標(biāo)簽庫(kù)標(biāo)簽和自定義設(shè)計(jì)的標(biāo)簽庫(kù)標(biāo)簽)以及具有視圖助手(ViewHelp)功能的JavaBean組件類(lèi)。具體的各個(gè)類(lèi)及類(lèi)之間的關(guān)系圖示如圖4.50所示。showUserlnib國(guó):an丁吧HcanDatcUlilshowOrderinfoshowBuyCartEh口wGctodsHnfoFdtcrCharLogicTagBc&nupdateUserlnfcuserRegisterHtmlagKeanFormlagBeenuscrLogin(fromJ5P表示粗件口)圖4.50網(wǎng)上商城項(xiàng)目表示層的類(lèi)圖.控制層
35、的類(lèi)圖由于本項(xiàng)目的控制層采用Struts框架來(lái)實(shí)現(xiàn),因此,項(xiàng)目控制層主要包括前端控制器組Action類(lèi)。由于本項(xiàng)目需要對(duì)件ActionServlet和各種完成具體業(yè)務(wù)調(diào)度的后端業(yè)務(wù)控制器標(biāo)準(zhǔn)的ActionServlet類(lèi)進(jìn)行繼承,以擴(kuò)展ActionServlet的功能,因此設(shè)計(jì)了自定義的前端控制器組件NetShopActionServlet類(lèi);又由于各個(gè)Action類(lèi)有共同的功能實(shí)現(xiàn)要求,因此為各個(gè)不同的Action類(lèi)提供了一個(gè)基類(lèi)BaseAction,以完成一些共性的任務(wù)。具體各個(gè)類(lèi)及類(lèi)之間的關(guān)系圖示如圖4.5l所示。圖4.51網(wǎng)上商城項(xiàng)目控制層的類(lèi)圖.業(yè)務(wù)層的類(lèi)圖網(wǎng)上商城項(xiàng)目的具體業(yè)務(wù)功能
36、主要有4類(lèi):與用戶有關(guān)的信息管理功能(UserManageBean承擔(dān))、與商口有關(guān)的信息管理功能(GoodsManageBean承擔(dān))、與訂單Spring有關(guān)的信息管理功能(OrderManageBean承擔(dān))、與購(gòu)物車(chē)有關(guān)的信息管理功能(BuyCartManageBean承擔(dān));每個(gè)具體的業(yè)務(wù)功能類(lèi)都實(shí)現(xiàn)各自的接口,這樣將便于框架中的IoC進(jìn)行對(duì)象管理。因此,將實(shí)現(xiàn)這些共另外,考慮到各個(gè)業(yè)務(wù)功能類(lèi)都會(huì)存在一些共同的功能實(shí)現(xiàn)要求。同功能的代碼提取出來(lái)并放到對(duì)應(yīng)的基類(lèi)中。這樣就為各個(gè)業(yè)務(wù)類(lèi)設(shè)計(jì)了一個(gè)業(yè)務(wù)基類(lèi)BaseModelBean類(lèi)。具體的各個(gè)類(lèi)及類(lèi)之間的關(guān)系圖示如圖4.52所示。圖4.52
37、網(wǎng)上商城項(xiàng)目業(yè)務(wù)層的類(lèi)圖.數(shù)據(jù)訪問(wèn)層的類(lèi)圖DAO類(lèi)。與數(shù)據(jù)本項(xiàng)目的持久層主要包括以下類(lèi)型的類(lèi):持久實(shí)體類(lèi)、數(shù)據(jù)訪問(wèn)組件庫(kù)連接功能則是由Hibernate框架來(lái)完成的,因此,沒(méi)有必要再自行編程數(shù)據(jù)庫(kù)連接的組件類(lèi)。(1)數(shù)據(jù)訪問(wèn)層的各個(gè)持久實(shí)體類(lèi)圖。圖4.53所示為本項(xiàng)目的持久層中各種類(lèi)型的持久實(shí)體類(lèi)之間關(guān)系的圖示,主要有代表用戶信息的實(shí)體類(lèi)、商品信息的實(shí)體類(lèi)、訂單信息的實(shí)體類(lèi)。圖4.53網(wǎng)上商城項(xiàng)目數(shù)據(jù)訪問(wèn)層的各個(gè)持久實(shí)體類(lèi)圖(2)數(shù)據(jù)訪問(wèn)層的各個(gè)數(shù)據(jù)訪問(wèn)組件(DAO)類(lèi)圖。圖4.54所示為本項(xiàng)目持久層中的數(shù)據(jù)訪問(wèn)組件DAO類(lèi),由于本項(xiàng)目中存在代表用戶DAO信息的實(shí)體類(lèi)、商品信息的實(shí)體類(lèi)、訂單信息的實(shí)體類(lèi)。因此,相應(yīng)地也就有對(duì)應(yīng)的組件類(lèi)。其中的GoodsInfoDAOBean類(lèi)實(shí)現(xiàn)的是商品信息的數(shù)據(jù)訪問(wèn)操作,UserInf
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版簡(jiǎn)易工傷賠償協(xié)議書(shū)范本-娛樂(lè)行業(yè)工傷賠償3篇
- 2025版跨區(qū)域貨運(yùn)風(fēng)險(xiǎn)分擔(dān)貨物運(yùn)輸保險(xiǎn)協(xié)議3篇
- 2024年物聯(lián)網(wǎng)農(nóng)業(yè)技術(shù)開(kāi)發(fā)與合作協(xié)議
- 2024年中國(guó)移動(dòng)式交通信號(hào)燈市場(chǎng)調(diào)查研究報(bào)告
- 四川2024下半年四川省林業(yè)科學(xué)研究院招聘10人筆試歷年典型考點(diǎn)(頻考版試卷)附帶答案詳解
- 2024年經(jīng)銷(xiāo)商協(xié)作協(xié)議范本版B版
- 2024年版無(wú)財(cái)產(chǎn)有未成年子女離婚合同模板一
- 2025版現(xiàn)代辦公場(chǎng)所廠房租賃合作協(xié)議書(shū)
- 2024年03月“夢(mèng)想靠岸”招商銀行長(zhǎng)春分行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度智慧農(nóng)業(yè)設(shè)施包清工承包合同范本3篇
- 吉林大學(xué)藥學(xué)導(dǎo)論期末考試高分題庫(kù)全集含答案
- 2023-2024學(xué)年河北省唐山市灤州市數(shù)學(xué)七年級(jí)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 高考語(yǔ)文新題型+“文學(xué)短評(píng)”相關(guān)寫(xiě)作(真題+技法+練習(xí))
- 2023年小學(xué)五年級(jí)數(shù)學(xué)上學(xué)期期末水平測(cè)試試卷(天河區(qū))
- 中考數(shù)學(xué)計(jì)算題100道
- 集團(tuán)資產(chǎn)重組實(shí)施方案
- GB/T 33195-2016道路交通事故車(chē)輛速度鑒定
- (職高)高一語(yǔ)文期末測(cè)試題及答案解析
- GB/T 14383-2008鍛制承插焊和螺紋管件
- 紅色簡(jiǎn)約大氣年會(huì)晚會(huì)節(jié)目單
- 李孟潮個(gè)體心理咨詢的操作
評(píng)論
0/150
提交評(píng)論