文章出處:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.htmlhtml
UML中描述對象和類之間相互關係的方式包括:依賴(Dependency),關聯(Association),聚合(Aggregation),組合(Composition),泛化(Generalization),實現(Realization)等。c++
其中依賴(Dependency)的關係最弱,而關聯(Association),聚合(Aggregation),組合 (Composition)表示的關係依次加強。換言之關聯,聚合,組合都是依賴關係的一種,聚合是代表對象之間的總體與部分關係的關聯,而組合是代表整 體與部分之間有相同生命週期關係的聚合。spa
而關聯與依賴的關係用一句話歸納下來就是,依賴描述了對象之間的調用關係,而關聯描述了對象之間的結構關係。htm
後面的例子將針對某個具體目的來獨立地展現各類關係。雖然語法無誤,但這些例子可進一步精煉,在它們的有效範圍內包括更多的語義。對象
一、依賴關係也是類與類之間的聯結
二、依賴老是單向的。(#add 注意,要避免雙向依賴。通常來講,不該該存在雙向依賴。)
三、依賴關係在 Java 或 C++ 語言中體現爲局部變量、方法的參數或者對靜態方法的調用。blog
class Person 繼承 { 接口 void buy(Car car) 生命週期 { ci ... } }
|
表示方法:虛線加箭頭
特色:當類與類之間有使用關係時就屬於依賴關係,不一樣於關聯關係,依賴不具備「擁有關係」,而是一種「相識關係」,只在某個特定地方(好比某個方法體內)纔有關係
一、關聯關係是類與類之間的聯結,它使一個類知道另外一個類的屬性和方法。
二、關聯能夠是雙向的,也能夠是單向的(#add還有自身關聯)。雙向的關聯能夠有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
三、在 Java 或 c++ 中,關聯關係是經過使用成員變量來實現的。
class 徒弟 { };
class 唐僧 { protected: list<徒弟> tdlist; }; |
表示方法:實線箭頭
特徵:表示類與類或類與接口之間的依賴關係,表現爲「擁有關係」;具體到代碼能夠用實例變量來表示。
一、聚合關係是關聯關係的一種,是強的關聯關係。
二、聚合是總體和部分之間的關係,例如汽車由引擎、輪胎以及其它零件組成。
三、聚合關係也是經過成員變量來實現的。可是,關聯關係所涉及的兩個類處在同一個層次上,而聚合關係中,兩個類處於不一樣的層次上,一個表明總體,一個表明部分。
四、關聯與聚合僅僅從 Java 或 C++ 語法上是沒法分辨的,必須考察所涉及的類之間的邏輯關係。
class 引擎 { };
class 輪胎 { };
class 汽車 { protected:引擎 engine; protected:輪胎 tyre[4]; };
|
表示方法:空心菱形頭
特徵:屬因而關聯的特殊狀況,體現部分-總體關係,是一種弱擁有關係;總體和部分能夠有不同的生命週期;是一種弱關聯;
一、合成關係是關聯關係的一種,是比聚合關係還要強的關係。
二、它要求普通的聚合關係中表明總體的對象負責表明部分的對象的生命週期。
class 肢 { };
class 人 { protected: 肢 limb[4]; }; |
通常是實心菱形加實線箭頭表示
特徵:屬因而關聯的特殊狀況,也體現了體現部分-總體關係,是一種強「擁有關係」;總體與部分有相同的生命週期,是一種強關聯;
通常化關係(泛化和實現):表示類與類之間的繼承關係,接口與接口之間的繼承關係,或類對接口的實現關係。通常化關係是子類指向父類的,或從實現接口的類指向被實現的接口,與繼承或實現的方向相反。以下圖所示:
圖:通常化關係
泛化(圖H)表示一個更泛化的元素和一個更具體的元素之間的關係。泛化是用於對繼承進行建模的UML元素。在Java中,用extends關鍵字來直接表示這種關係。
泛化關係表示類與類之間的繼承關係,接口與接口之間的繼承關係。圖H
1.1.6 實現(Realization):空心箭頭和虛線表示
實例(圖I)關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另外一個實體保證履行該合同。對Java應用程序進行建模時,實現關係可直接用implements關鍵字來表示。
圖I