從C++程序上看,類A與類B之間關系有:繼承,包含,引用以及相關。
繼承就是A繼承B,是聯系最為緊密的;
包含指A作為B的一個成員變量,那么A將成為B變量對象空間的一部分;
引用指A作為B的一個成員變量的指針或引用;
最后是相關,這種關系就更松散了,A做為B成員函數的參數,或成員函數中的一個臨時變量而存在。
==================================================================
UML中是如何來描述這些關系呢?
對應繼承的有:實現(Realization)、泛化(Generalization)
對應包含的有:聚合關系(Aggregation),合成[復合/包容]關系(Composition)
對應引用的有:關聯(Association)
對應相關的有:依賴(Dependency)
==================================================================
1. 實現(Realization)& 泛化(Generalization)
2. 聚合關系(Aggregation) & 合成[復合/包容]關系(Composition)
聚合: CRoom聚合CLocate,但CLocate是可以脫離CRoom而獨立存在的。
合成[復合/包容]:CRoom是由CCeiling、CFloor和CWall組成,它們之間具有整體與部分的關系。
兩個類之間是聚合,還是合成關系,需要根據具體的語義環境來區分。
3. 關聯(Association)
(1)雙向關聯
1 /* Person.h */ 2 class CPerson 3 { 4 public: CCompany* m_pCompany; 5 }; 6 7 /* Company.h */ 8 class CCompany 9 { 10 public: CPerson* m_pPerson; 11 };
(2)單向關聯
1 /* Person.h */ 2 class CPerson 3 { 4 }; 5 6 /* Company.h */ 7 class CCompany 8 { 9 CPerson* m_pPerson; 10 };
--> 選擇“關聯”類型,從CCompany拉線指向CPerson,然后選擇右鍵快捷菜單中“開啟規格說明...”,修改“可導覽”為:Unspecified
(3)自身[反身]關聯
1 /* Logger.h */ 2 class CLogger 3 { 4 public: CLogger* m_pLogger; 5 };
4. 依賴(Dependency)
1 /* Mission.h */ 2 class CMission 3 { 4 public void DoMission(CMethod& method); 5 };
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
參考
(1)UML類圖 - wiki
(2)UML類圖關系大全
(3)UML類圖與類的關系詳解
(5)VP-UML非商業用途版本下載 【有2個版本:Installer版本安裝不成功話,試試綠色版本】
(6)UML類圖幾種關系的總結