面向對象UML中類關系資料_第1頁
面向對象UML中類關系資料_第2頁
面向對象UML中類關系資料_第3頁
面向對象UML中類關系資料_第4頁
面向對象UML中類關系資料_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、面向對象UML中類關系2011-5-19 來源:網絡如果你確定兩件對象之間是is-a的關系,那么此時你應該使用繼承;比如菱形、圓形和方形都是形狀的一種,那么他們都應該從形狀類繼承而不是聚合。如果你確定兩件對象之間是has-a的關系,那么此時你應該使用聚合;比如電腦是由顯示器、CPU、硬盤等組成的,那么你應該把顯示器、CPU、硬盤這些類聚合成電腦類,而不是從電腦類繼承。類間的關系 網上關于此類的討論非常多,發現對于該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對O'Reilly - UML 2.0 In A Nutshell (2007)的參考,發表一下自己的看法

2、類間關系有很多種,在大的類別上可以分為兩種:縱向關系、橫向關系??v向關系就是繼承關系,它的概念非常明確,也成為OO的三個重要特征之一,這里不過多的討論。橫向關系較為微妙,按照UML的建議大體上可以分為四種:1. 依賴    (Dependency) 2. 關聯    (Association) 3. 聚合    (Aggregation) 4. 組合    (Composition) 它們的強弱關系是沒有異議的:依賴 < 關聯 < 聚合 < 組合然而它們四個

3、之間的差別卻又不那么好拿捏,需要好好體會。1. 依賴: o UML表示法:虛線 + 箭頭 o 關系:" . uses a ." o 此關系最為簡單,也最好理解,所謂依賴就是某個對象的功能依賴于另外的某個對象,而被依賴的對象只是作為一種工具在使用,而并不持有對它的引用。 o 典型的例子很多,比如:class Human    public void breath()            Air freshAir = new A

4、ir();        freshAir.releasePower();        public static void main()            Human me = new Human();        while(true)   

5、60;                me.breath();            class Air    public void releasePower()            /do sth. &#

6、160;    o 釋義:一個人自創生就需要不停的呼吸,而人的呼吸功能之所以能維持生命就在于吸進來的氣體發揮了作用,所以說空氣只不過是人類的一個工具,而人并不持有對它的引用。 2. 關聯: o UML表示法:實線 + 箭頭 o 關系:" . has a ." o 所謂關聯就是某個對象會長期的持有另一個對象的引用,而二者的關聯往往也是相互的。關聯的兩個對象彼此間沒有任何強制性的約束,只要二者同意,可以隨時解除關系或是進行關聯,它們在生命期問題上沒有任何約定。被關聯的對象還可以再被別的對象關聯,所以關聯是可以共享的。 o 典型的例子很多,比如:class H

7、uman    ArrayList friends = new ArrayList();    public void makeFriend(Human human)            friends.add(human);        public static void main()      &#

8、160;     Human me = new Human();        while(true)                    me.makeFriend(mySchool.getStudent();      &#

9、160;     o 釋義:人從生至死都在不斷的交朋友,然而沒有理由認為朋友的生死與我的生死有必然的聯系,故他們的生命期沒有關聯,我的朋友又可以是別人的朋友,所以朋友可以共享。 3. 聚合:   o UML表示法:空心菱形 + 實線 + 箭頭 o 關系:" . owns a ." o 聚合是強版本的關聯。它暗含著一種所屬關系以及生命期關系。被聚合的對象還可以再被別的對象關聯,所以被聚合對象是可以共享的。雖然是共享的,聚合代表的是一種更親密的關系。 o 典型的例子很多,比如:class Human  

10、60; Home myHome;    public void goHome()            /在回家的路上        myHome.openDoor();        /看電視        public static v

11、oid main()            Human me = new Human();        while(true)                    /上學     

12、60;      /吃飯            me.goHome();              o 釋義:我的家和我之間具有著一種強烈的所屬關系,我的家是可以分享的,而這里的分享又可以有兩種。其一是聚合間的分享,這正如你和你媳婦兒都對這個家有著同樣的強烈關聯;其二是聚合與關聯的分享,如果你的朋友來家里吃個便飯,估計

13、你不會給他配一把鑰匙。 4. 組合: o UML表示法:實心菱形 + 實線 + 箭頭 o 關系:" . is a part of  ." o 組合是關系當中的最強版本,它直接要求包含對象對被包含對象的擁有以及包含對象與被包含對象生命期的關系。被包含的對象還可以再被別的對象關聯,所以被包含對象是可以共享的,然而絕不存在兩個包含對象對同一個被包含對象的共享。 o 典型的例子很多,比如:class Human    Heart myHeart = new Heart();    p

14、ublic static void main()            Human me = new Human();        while(true)                    myHeart.beat();            o 釋義:組合關系就是整體與部分的關系,部分屬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論