區(qū)分 UML 類圖中的幾種關(guān)系
?? UML 類圖中的 ”關(guān)聯(lián)關(guān)系(association) “、”聚合關(guān)系(aggregation) “、”合成關(guān)系 (compostion)“ 和”依賴關(guān)系 (dependency)“ 不是很容易區(qū)分清楚,《UML distilled》 對(duì)這幾個(gè)關(guān)系也沒有解釋的特別清楚。近日翻閱《Java 與模式》,發(fā)現(xiàn)其中對(duì)這些關(guān)系有較為清晰的描述,特摘錄如下:
?關(guān)聯(lián)關(guān)系 (association):
?? (1)關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)結(jié),它使一個(gè)類知道另一個(gè)類的屬性和方法。
? ?(2)關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
? ?(3)在 Java 或 c++ 中,關(guān)聯(lián)關(guān)系是通過使用成員變量來實(shí)現(xiàn)的。 class 徒弟
? ?{ };
? ?class 唐僧
? ? {
? ? protected:
? ?list<徒弟> tdlist;
? ? };?
???

?聚合關(guān)系 (aggregation):
? ?1、聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。
?? 2、聚合是整體和部分之間的關(guān)系,例如汽車由引擎、輪胎以及其它零件組成。
?? 3、聚合關(guān)系也是通過成員變量來實(shí)現(xiàn)的。但是,關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類處在同一個(gè)層次上,而聚合關(guān)系中,兩個(gè)類處于不同的層次上,一個(gè)代表整體,一個(gè)代表部分。
?? 4、關(guān)聯(lián)與聚合僅僅從 Java 或 C++ 語法上是無法分辨的,必須考察所涉及的類之間的邏輯關(guān)系。
?? class 引擎
?? {
?? };
?? class 輪胎
?? {
?? };
?? class 汽車
?? {
?? protected:
?? 引擎 engine;
?? 輪胎 tyre[4];
?? };?
??

合成關(guān)系 (composition):
?? 1、合成關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系。
?? 2、它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。
?? 1 class 肢
?? {
?? };
?? class 人
?? {
?? protected:
?? 肢 limb[4];
?? };

依賴關(guān)系 (dependency):
? ?1、依賴關(guān)系也是類與類之間的聯(lián)結(jié)
?? 2、依賴總是單向的。
? ?3、依賴關(guān)系在 Java 或 C++ 語言中體現(xiàn)為局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用。
顯示代碼打印
?? public class Person
?? {
?? public void buy(Car car)
?? { ... }
? ?}?

?