面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系

面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系

ID:38530329

大?。?8.00 KB

頁數(shù):4頁

時(shí)間:2019-06-14

面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系_第1頁
面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系_第2頁
面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系_第3頁
面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系_第4頁
資源描述:

《面向?qū)ο?依賴 關(guān)聯(lián) 聚合 組合 關(guān)系》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、面向?qū)ο笠蕾囮P(guān)聯(lián)聚合組合關(guān)系如果你確定兩件對(duì)象之間是is-a的關(guān)系,那么此時(shí)你應(yīng)該使用繼承;比如菱形、圓形和方形都是形狀的一種,那么他們都應(yīng)該從形狀類繼承而不是聚合。如果你確定兩件對(duì)象之間是has-a的關(guān)系,那么此時(shí)你應(yīng)該使用聚合;比如電腦是由顯示器、CPU、硬盤等組成的,那么你應(yīng)該把顯示器、CPU、硬盤這些類聚合成電腦類,而不是從電腦類繼承。類間的關(guān)系網(wǎng)上關(guān)于此類的討論非常多,發(fā)現(xiàn)對(duì)于該問題的理解各有各的說法,而各個(gè)說法中又相去甚遠(yuǎn)。通過瀏覽這些討論以及對(duì)《O'Reilly-UML2.0InANutshell(2007)》的參考,發(fā)表一下自己的看法類間關(guān)系有很多種,在大的類別上

2、可以分為兩種:縱向關(guān)系、橫向關(guān)系??v向關(guān)系就是繼承關(guān)系,它的概念非常明確,也成為OO的三個(gè)重要特征之一,這里不過多的討論。橫向關(guān)系較為微妙,按照UML的建議大體上可以分為四種:依賴???(Dependency)關(guān)聯(lián)???(Association)聚合???(Aggregation)組合???(Composition)它們的強(qiáng)弱關(guān)系是沒有異議的:依賴<關(guān)聯(lián)<聚合<組合然而它們四個(gè)之間的差別卻又不那么好拿捏,需要好好體會(huì)。依賴:UML表示法:虛線+箭頭關(guān)系:"...usesa..."此關(guān)系最為簡(jiǎn)單,也最好理解,所謂依賴就是某個(gè)對(duì)象的功能依賴于另外的某個(gè)對(duì)象,而被依賴的對(duì)象只是作為一種

3、工具在使用,而并不持有對(duì)它的引用。典型的例子很多,比如:?classHuman{???publicvoidbreath()???{???????AirfreshAir=newAir();???????freshAir.releasePower();???}???publicstaticvoidmain()???{???????Humanme=newHuman();???????while(true)???????{???????????me.breath();???????}???}}classAir{???publicvoidreleasePower()???{???????/

4、/dosth.???}}釋義:一個(gè)人自創(chuàng)生就需要不停的呼吸,而人的呼吸功能之所以能維持生命就在于吸進(jìn)來的氣體發(fā)揮了作用,所以說空氣只不過是人類的一個(gè)工具,而人并不持有對(duì)它的引用。關(guān)聯(lián):UML表示法:實(shí)線+箭頭關(guān)系:"...hasa..."所謂關(guān)聯(lián)就是某個(gè)對(duì)象會(huì)長(zhǎng)期的持有另一個(gè)對(duì)象的引用,而二者的關(guān)聯(lián)往往也是相互的。關(guān)聯(lián)的兩個(gè)對(duì)象彼此間沒有任何強(qiáng)制性的約束,只要二者同意,可以隨時(shí)解除關(guān)系或是進(jìn)行關(guān)聯(lián),它們?cè)谏趩栴}上沒有任何約定。被關(guān)聯(lián)的對(duì)象還可以再被別的對(duì)象關(guān)聯(lián),所以關(guān)聯(lián)是可以共享的。典型的例子很多,比如:classHuman{???ArrayListfriends=newAr

5、rayList();???publicvoidmakeFriend(Humanhuman)???{???????friends.add(human);???}???publicstaticvoidmain()???{???????Humanme=newHuman();???????while(true)???????{???????????me.makeFriend(mySchool.getStudent());???????}???}}釋義:人從生至死都在不斷的交朋友,然而沒有理由認(rèn)為朋友的生死與我的生死有必然的聯(lián)系,故他們的生命期沒有關(guān)聯(lián),我的朋友又可以是別人的朋友,所以朋友

6、可以共享。聚合:??UML表示法:空心菱形+實(shí)線+箭頭關(guān)系:"...ownsa..."聚合是強(qiáng)版本的關(guān)聯(lián)。它暗含著一種所屬關(guān)系以及生命期關(guān)系。被聚合的對(duì)象還可以再被別的對(duì)象關(guān)聯(lián),所以被聚合對(duì)象是可以共享的。雖然是共享的,聚合代表的是一種更親密的關(guān)系。典型的例子很多,比如:classHuman{???HomemyHome;???publicvoidgoHome()???{???????//在回家的路上???????myHome.openDoor();???????//看電視???}???publicstaticvoidmain()???{???????Humanme=newHuma

7、n();???????while(true)???????{???????????//上學(xué)???????????//吃飯???????????me.goHome();???????}???}}釋義:我的家和我之間具有著一種強(qiáng)烈的所屬關(guān)系,我的家是可以分享的,而這里的分享又可以有兩種。其一是聚合間的分享,這正如你和你媳婦兒都對(duì)這個(gè)家有著同樣的強(qiáng)烈關(guān)聯(lián);其二是聚合與關(guān)聯(lián)的分享,如果你的朋友來家里吃個(gè)便飯,估計(jì)你不會(huì)給他配一把鑰匙。組合:UML表示法:實(shí)心菱形+實(shí)線+箭頭關(guān)系:"...

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。