UML中描述對象和類之間相互關係的方式包括:依賴,關聯,聚合,組合,泛化,實現等。java
表示關係的強弱:組合>聚合>關聯>依賴c++
相互間關係spa
聚合是代表對象之間的總體與部分關係的關聯,而組合是代表總體與部分之間有相同生命週期關係的聚合。而關聯與依賴的關係是,依賴描述了對象之間的調用關係,而關聯描述了對象之間的結構關係。.net
一、依賴關係也是類與類之間的聯結
二、依賴老是單向的。(#add 注意,要避免雙向依賴。通常來講,不該該存在雙向依賴。)
三、依賴關係在 Java 或 C++ 語言中體現爲局部變量、方法的參數或者對靜態方法的調用。code
虛線加箭頭對象
關聯(Association):元素間的結構化關係,是一種弱關係,被關聯的元素間一般能夠被獨立的考慮。uml中用實線表示Association關係,箭頭指向被依賴元素。blog
一、關聯關係是類與類之間的聯結,它使一個類知道另外一個類的屬性和方法。
二、關聯能夠是雙向的,也能夠是單向的(#add還有自身關聯)。雙向的關聯能夠有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
三、在 Java 或 c++ 中,關聯關係是經過使用成員變量來實現的。繼承
聚合(Aggregation):關聯關係的一種特例,表示部分和總體(總體 has a 部分)的關係。uml中用帶空心菱形頭的實線表示,菱形頭指向總體。接口
一、聚合關係是關聯關係的一種,是強的關聯關係。
二、聚合是總體和部分之間的關係,例如汽車由引擎、輪胎以及其它零件組成。
三、聚合關係也是經過成員變量來實現的。可是,關聯關係所涉及的兩個類處在同一個層次上,而聚合關係中,兩個類處於不一樣的層次上,一個表明總體,一個表明部分。
四、關聯與聚合僅僅從 Java 或 C++ 語法上是沒法分辨的,必須考察所涉及的類之間的邏輯關係。生命週期
組合(Composition):組合是聚合關係的變種,表示元素間更強的組合關係。若是是組合關係,若是總體被破壞則個體必定會被破壞,而聚合的個體則多是被多個總體所共享的,不必定會隨着某個總體的破壞而被破壞。uml中用帶實心菱形頭的實線表示Composition關係,菱形頭指向總體。
一、合成關係是關聯關係的一種,是比聚合關係還要強的關係。
二、它要求普通的聚合關係中表明總體的對象負責表明部分的對象的生命週期。
表示類與類之間的繼承關係,接口與接口之間的繼承關係,或類對接口的實現關係。通常化關係是子類指向父類的,或從實現接口的類指向被實現的接口,與繼承或實現的方向相反。以下圖所示:
通常化關係
泛化(Generalization):一般所說的繼承(特殊個體 is kind of 通常個體)關係,沒必要多解釋了。uml中用帶空心箭頭的實線表示,箭頭指向通常個體。
帶空心箭頭的實線線表示
泛化表示一個更泛化的元素和一個更具體的元素之間的關係。泛化是用於對繼承進行建模的UML元素。在Java中,用extends關鍵字來直接表示這種關係。
泛化關係表示類與類之間的繼承關係,接口與接口之間的繼承關係。
實現(Realize):元素A定義一個約定,元素B實現這個約定,則B和A的關係是Realize,B realize A。這個關係最經常使用於接口。uml中用空心箭頭和虛線表示,箭頭指向定義約定的元素。
實現關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另外一個實體保證履行該合同。對Java應用程序進行建模時,實現關係可直接用implements關鍵字來表示。