區分 UML 類圖中的幾種關系
UML 類圖中的 ”關聯關系(association) “、”聚合關系(aggregation) “、”合成關系 (compostion)“ 和”依賴關系 (dependency)“ 不是很容易區厘清楚,《UML distilled》 對這幾個關系也沒有解釋的特别清楚。近日翻閱《Java 與模式》,發現其中對這些關系有較為清晰的描述,特摘錄如下:
關聯關系 (association):
(1)關聯關系是類與類之間的聯結,它使一個類知道另一個類的屬性和方法。
(2)關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
(3)在 Java 或 c++ 中,關聯關系是通過使用成員變量來實作的。
class 徒弟
{ };
class 唐僧
{
protected list<徒弟> tdlist;
};
<a href="http://yjplxq.blog.51cto.com/attachment/201207/31/4081353_1343711144YPO4.jpg"></a>
聚合關系 (aggregation):
1、聚合關系是關聯關系的一種,是強的關聯關系。
2、聚合是整體和部分之間的關系,例如汽車由引擎、輪胎以及其它零件組成。
3、聚合關系也是通過成員變量來實作的。但是,關聯關系所涉及的兩個類處在同一個層次上,而聚合關系中,兩個類處于不同的層次上,一個代表整體,一個代表部分。
4、關聯與聚合僅僅從 Java 或 C++ 文法上是無法分辨的,必須考察所涉及的類之間的邏輯關系。
class 引擎
};
class 輪胎
class 汽車
protected:
引擎 engine;
輪胎 tyre[4];
<a href="http://yjplxq.blog.51cto.com/attachment/201207/31/4081353_134371114579Qn.jpg"></a>
合成關系 (composition):
1、合成關系是關聯關系的一種,是比聚合關系還要強的關系。
2、它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。
class 肢 {
class 人{
肢 limb[4];
<a href="http://yjplxq.blog.51cto.com/attachment/201207/31/4081353_1343711146rxFb.jpg"></a>
依賴關系 (dependency):
1、依賴關系也是類與類之間的聯結
2、依賴總是單向的。
3、依賴關系在 Java 或 C++ 語言中展現為局部變量、方法的參數或者對靜态方法的調用。
顯示代碼列印
public class Person
public void buy(Car car)
{ ... }
}
<a href="http://yjplxq.blog.51cto.com/attachment/201207/31/4081353_1343711146Z8Ab.jpg"></a>
總結:
1、不同的關系采用不同的 UML 圖例
2、對于聚合關系、合成關系,由于都是關聯關系的一種,是以在不确定的情況下,可以以關聯關系來描述它們。
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/948903,如需轉載請自行聯系原作者