類之間有著各種各樣的關系, 使用UML的類圖,可以幫助我們設計、梳理各個類之間的關系
實例
類之間的關系
- 泛化 generalization
- 實現 realize
- 依賴 dependency
- 關聯 association
- 聚合 aggregation
- 組合 composition
泛化(繼承inheritance)
空心箭頭的實線
實現(接口繼承)
空心箭頭的虛線
依賴
一個類A使用到了另一個類B," ... uses a ...",被依賴的對象只是作為一種工具在使用,而并不持有對它的引用。
表現在代碼層面,為類B作為參數被類A在某個method(方法)中使用。
箭頭虛線
關聯
兩個類之間、或類與接口之間一種強依賴關系,是一種長期的穩定的關系," ... has a ..."
在代碼層面上,被關聯的類以類屬性的形式出現在關聯類中,也可能是關聯類引用了一個類型為被關聯類的全局變量。
實線
*沒有箭頭表示相互知道,有箭頭表示單方面知道
聚合
聚合
是表示整體與部分的一類特殊的關聯關系,是弱的包含" ... owns a ..." 關系,成分類可以不依靠聚合類而單獨存在,可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享
班級由學生組成(班級知道學生,學生不知道班級)
空心菱形箭頭實線
組合
組合
關系,是一類強的整體與部分的包含關系" ... is a part of ..."。成分類必須依靠合成類
而存在。整體與部分是不可分的,整體的生命周期結束也就意味著部分的生命周期結束。合成類
完全擁有成分類
,合成類
負責創建、銷毀成分類別。
實心菱形箭頭實線
關聯、聚合、組合的差異
當一個類作為另一個類某個方法的參數時,為關聯
。
兩者的差別主要描述了子類的生命周期的不同。組合
關系中,一旦父類被銷毀子類也會隨之銷毀;聚合
關系中,子類的生命周期與父類獨立。
例如,一個大學包含若干個系(如化學系),每個系由若干名教授。如果大學撤銷,這些系也就不復存在了,但這些教授仍會繼續存在。還需注意,一名教授可以在不同系甚至不同學校兼職,而一個系不能屬于兩所大學。所以,大學與系之間是組合
關系,而系與教授是聚合
關系。