UML中類與類,已經類與接口,接口與接口的關係有:泛化(generalization),關聯(association),依賴(dependency),實現(realization)這幾種。java
實現(realization)是指一個class實現interface接口(一個或者多個),表示類具有了某種能力,實現是類與接口中最多見的關係,在Java中經過implements關鍵字來表示。post
依賴(dependency)關係也是表示類與類之間的鏈接,表示一個類依賴於另一個類的定義,依賴關係時是單向的。簡單理解就是類A使用到了類B,這種依賴具備偶然性、臨時性,是很是弱的關係。可是類B的變化會影響到類A。舉個例子,如某人要過河,則人與船的關係就是依賴,人過河以後,與船的關係就解除了,所以是一種弱的鏈接。在代碼層面,爲類B做爲參數被類A在某個方法中使用。對象
在java中,依賴表現爲:局部變量,方法中的參數和對靜態方法的調用。blog
關聯(association)關係表示類與類之間的鏈接,它使得一個類知道另一個類的屬性和方法。繼承
關聯可使用單箭頭表示單向關聯,使用雙箭頭或者不適用箭頭表示雙向關聯,不建議使用雙向關聯,關聯有兩個端點,每一個端點能夠有一個基數,表示這個關聯的類能夠有幾個實例。接口
0..1 表示能夠有0個或者1個實例生命週期
0..* 表示對實例的數目沒有限制ci
1 表示只能有一個實例get
1..* 表示至少有一個實例it
關聯關係體現的是兩個類,或者類與接口之間的強依賴關係,這種關係很強烈,比依賴更強,不是偶然性的,也不是臨時性的,而是一種長期性,相對平等的關係,表如今代碼層面,爲被關聯的類B以類屬性的形式出如今類A中,也多是關聯類A引用了被關聯類B的全局變量。
在Java中,關聯關係是使用實例變量來實現的
聚合(aggregation)是關聯關係的特例,是強的關聯關係,聚合是整個與個體的關係,即has-a關係,此時總體和部分是能夠分離的,他們具備各自的生命週期,部分能夠屬於多個對象,也能夠被多個對象共享;好比計算機和CPU,公司與員工的關係;在代碼層面聚合與關聯是一致的,只能從語義上來區分。
聚合關係也是使用實例變量來實現的,在java語法上區分不出關聯和聚合,關聯關係中類出於一個層次,而聚合則明顯的在兩個不一樣的層次。
組合(compostion)也是關聯關係的一種特例,體現的是一種contain-a關係,比聚合更強,是一種強聚合關係。它一樣體現總體與部分的關係,但此時總體與部分是不可分的,總體生命週期的結束也意味着部分生命週期的結束,反之亦然。如大腦和人類。
體如今代碼層面與關聯時一致的,只能從語義來區分。
組合與聚合幾乎徹底相同,惟一區別就是對於組合,「部分」不一樣脫離「總體」單獨存在,其生命週期應該是一致的。
總結:
主要是關聯關係的細化須要注意強弱,由若到強分別是 依賴 < 關聯 < 聚合 < 組合
參考: