天天看點

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      關聯用來表示兩個或多個類的對象之間的結構關系,它在代碼中表現為一個類以屬性的形式包含對另一個類的一個或多個對象的應用。

      假設:一個公司隻有三名員工:一個員工要麼沒有工作,要麼隻能在一個公司工作。(代碼簡化了,主要說明關聯關系)

      person類:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      company類:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      控制台程式:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      輸出:

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      對應的類圖:

[UML]UML系列——類圖class的關聯關系(聚合、組合)

       概念:兩個類之間的關聯成為二進制關聯。

       符号:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      比如:在一個大公司裡,公司總裁隻認識那些核心職員,不認識所有的普通職員,而所有的職員都認識總裁。

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      對應的類圖:

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      單向關聯關系對應的代碼:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      雙向關聯關系對應的代碼:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

     關聯的名稱表達了關聯的内容,一般使用動賓結構的短語。(例如上面的類圖中:work)

     關聯命名的原則是該命名是否有助于了解該模型。

     關聯中的角色是類的對象在關聯中所扮演的角色。例如上圖中的:employer(雇傭方),employee(員工:受雇傭的人)。關聯的角色會轉換為代碼。

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

       用可見性修飾角色名稱,以說明角色名稱可以在哪些範圍内可被通路到。

[UML]UML系列——類圖class的關聯關系(聚合、組合)

       代碼:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      多重性是指有多少個對象參與了關聯。具體的說,是指類a的一個對象對應類b的對象的個數。

      舉個例子說明吧:

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      對應代碼:   

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

    (就是上面的數字描述)

     多重性有哪些表示?

1:        表示1個

0..*:    表示任意多個( ≥0)(*可以換成n)

*:       表示任意多個( ≥0)

1..*:    表示1個或多個(≥1)

0..1:    表示0個或1個

5..11:   表示5-11個

1,3,8: 表示個1或3個或8個

0,3..8: 表示0個或3-8個

     在rose中怎麼設定?

[UML]UML系列——類圖class的關聯關系(聚合、組合)

       聚合(聚集)與組合(合成、組成)是兩種特殊的關聯。

       1、聚合(關聯的特例)

       聚合的概念:聚合表示類之間的整體與部分的關系。聚合意味着一個類擁有但共享另一個類的對象。

       程式示範:聚合(code/associationb)

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

      聚合的符号

      在整體類端加空心菱形。

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      當整體類不存在時,不分類仍可能存在。部分類銷毀時,整體類也将能夠存在。

      關聯關系和聚合關系在文法上是沒辦法區分的,得從語義上才能更好的區分兩者的差別。

      2、組成

      組成的概念:組成是一種特殊形式的聚合。

      與聚合相比,它有兩個特點:

 一個部分類最多隻能屬于一個整體類

當整體類不存在時,部分類将同時被銷毀。

     最容易了解的一個例子就是窗體和文本框,當窗體不存在時,文本框也将不存在。

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      組成的符号:

      在整體類端加實心菱形。如圖:

[UML]UML系列——類圖class的關聯關系(聚合、組合)
[UML]UML系列——類圖class的關聯關系(聚合、組合)

       關聯關系所涉及的兩個類是處于同一個層次上的。比如學生和課程就是一種關聯關系,而不是聚合關系,因為學生不是有課程組成的。

       聚合關系涉及的兩個類處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和顯示器、鍵盤、主機闆、記憶體就是聚合關系,因為主機闆是電腦的組成部分。而鍵盤等部件不會因為電腦沒了,就不存在了。

聚合與組合的差別:

      組合:整體類端的重數必須是1,部分類的重數是任意的。

      聚合:整體類端的重數可以大于1,部分類的重數是任意的。

       1、二進制關聯關系

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      2、設定關聯名和角色名

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      3、設定多重性

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      4、設定關聯的可見性

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      5、添加雙向關聯按鈕(工具欄上預設是沒有雙向關聯的按鈕的,得自己添加)

[UML]UML系列——類圖class的關聯關系(聚合、組合)

       6、聚合:(1)添加關聯,并設定關聯的名稱與角色名

[UML]UML系列——類圖class的關聯關系(聚合、組合)

          (2)輕按兩下關聯線,彈出右窗, 選中aggregate

[UML]UML系列——類圖class的關聯關系(聚合、組合)

          7、組合:(1)添加關聯,并設定關聯的名稱與角色名

[UML]UML系列——類圖class的關聯關系(聚合、組合)

        (2)輕按兩下關聯線,彈出右窗,選中aggregate和by value

[UML]UML系列——類圖class的關聯關系(聚合、組合)

      在介紹關聯關系中,又介紹了聚合群組合這兩種特殊的關聯,在使用的時候一定要注意這兩者的差別。容易混淆。不能按字面意義來了解......

      本來打算把類圖的四種關系介紹完的,這才發現,就關聯關系也是個長篇大論了,寫的多了,你也煩,我也煩,lz不喜歡看太長的文章,不利于了解。

      好了,一起慢慢消化吧.......如果您覺得對您有點幫助,不妨點一下推薦.....

 系列文章

部落格位址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

部落格版權:

本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。

如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!

再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/3420120.html

繼續閱讀