UML中關聯,彙總,組合的區別及C++實現

來源:互聯網
上載者:User

類間關係

在類圖中,除了需要描述單獨的類的名稱、屬性和操作外,我們還需要描述類之間的聯絡,因為沒有類是單獨存在的,它們通常需要和別的類協作,創造比單獨工作更大的語義。在UML類圖中,關係用類框之間的連線來表示,連線上和連線端頭處的不同修飾符表示不同的關係。類之間的關係有繼承(泛化)、關聯、彙總和組合。

(1)繼承:指的是一個類(稱為子類)繼承另外的一個類(稱為基類)的功能,並增加它自己的新功能的能力,繼承是類與類之間最常見的關係。類圖中繼承的表示方法是從子類拉出一條閉合的、單鍵頭(或三角形)的實線指向基類。例如,圖3.2給出了MFC中CObject類和菜單類CMenu的繼承關係。

     圖3.2 類的繼承

類的繼承在C++中呈現為:

class B { }
 class A : public B{ }

(2)關聯:指的是模型元素之間的一種語義聯絡,是類之間的一種很弱的聯絡。關聯可以有方向,可以是單向關聯,也可以是雙向關聯。可以給關聯加上關聯名來描述關聯的作用。關聯兩端的類也可以以某種角色參與關聯,角色可以具有多重性,表示可以有多少個對象參與關聯。可以通過關聯類別進一步描述關聯的屬性、操作以及其他資訊。關聯類別通過一條虛線與關聯串連。對於關聯可以加上一些約束,以加強關聯的含義。
 
 關聯在C++中呈現為:

class A{...}
 class B{ ...}
 A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b)

即一個類作為另一個類方法的參數。

(3)彙總:指的是整體與部分的關係。通常在定義一個整體類後,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了彙總關係。例如一個航母編隊包括海空母艦、驅護艦艇、艦載飛機及核動力攻擊潛艇等。需求描述中“包含”、“組成”、“分為…部分”等詞常意味著彙總關係。

(4)組合:也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關係。

彙總和組合的區別在於:彙總關係是“has-a”關係,組合關係是“contains-a”關係;彙總關係表示整體與部分的關係比較弱,而組合比較強;彙總關係中代表部分事物的對象與代表彙總事物的對象的生存期無關,一旦刪除了彙總對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。

我們用淺顯的例子來說明彙總和組合的區別。“國破家亡”,國滅了,家自然也沒有了,“國”和“家”顯然也是組合關係。而相反的,電腦和它的外設之間就是彙總關係,因為它們之間的關係相對鬆散,電腦沒了,外設還可以獨立存在,還可以接在別的電腦上。在彙總關係中,部分可以獨立於彙總而存在,部分的所有權也可以由幾個彙總來共用,比如印表機就可以在辦公室內被廣大同事共用。

在C++語言中,從實現的角度講,彙總可以表示為:

class A {...}
 class B { A* a; .....}

即類B包含類A的指標;

而組合可表示為:

class A{...}
 class B{ A a; ...}

即類B包含類A的對象。

準確的UML類圖中用空心和實心菱形對彙總和組合進行了區分。

          圖3.4 彙總和組合  關聯和彙總的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,彙總則一般不是平等的,例如一個公司包含了很多員工,其實現上是差不多的。彙總和組合的區別則在語義和實現上都有差別,組合的兩個對象之間其生命期有很大的關聯,被組合的對象是在組合對象建立的同時或者建立之後建立,在組合對象銷毀之前銷毀。一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬於一個組合對象,例如一個文檔的版本,必須依賴於文檔的存在,也只能屬於一個文檔。彙總則不一樣,被彙總的對象可以屬於多個彙總對象,例如一個員工可能可以屬於多個公司。

 我想舉個通俗的例子。
你和你的心臟之間是composition關係(心臟只屬於你自己)
你和你買的書之間是aggregation關係(書可能是別人的)
你和你的朋友之間是association關係

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.