UML類圖以及類圖之間的關係
轉自:http://blog.csdn.net/tianhai110/article/details/6339565
在UML類圖中,常見的有以下幾種關係: 泛化(Generalization), 實現(Realization), 關聯(Association), 聚合(Aggregation), 組合(Composition), 依賴(Dependency)
1. 泛化(Generalization)
【泛化關係】:是一種繼承關係, 表示一般與特殊的關係, 它指定了子類如何特化父類的所有特徵和行為. 例如:老虎是動物的一種, 即有老虎的特性也有動物的共性.
【箭頭指向】:帶三角箭頭的實線,箭頭指向父類
2. 實現(Realization)
【實現關係】:是一種類與介面的關係, 表示類是介面所有特徵和行為的實現.
【箭頭指向】:帶三角箭頭的虛線,箭頭指向介面
3. 關聯(Association)
【關聯關係】:是一種擁有的關係, 它使一個類知道另一個類的屬性和方法;如:老師與學生,丈夫與妻子
關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
【程式碼體現】:成員變數
【箭頭及指向】:帶普通箭頭的實心線,指向被擁有者
上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關係為單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。
上圖為自身關聯:
4. 聚合(Aggregation)
【聚合關係】:是整體與部分的關係(has a 的關係), 且部分可以離開整體而單獨存在. 如車和輪胎是整體和部分的關係, 輪胎離開車仍然可以存在.
聚合關係是關聯關係的一種,是強的關聯關係;關聯和聚合在語法上無法區分,必須考察具體的邏輯關係。
【程式碼體現】:成員變數
【箭頭及指向】:帶空心菱形的實心線,菱形指向整體
5. 組合(Composition)
【組合關係】:是整體與部分的關係(contains a的關係), 但部分不能離開整體而單獨存在. 如公司和部門是整體和部分的關係, 沒有公司就不存在部門.
組合關係是關聯關係的一種,是比聚合關係還要強的關係,它要求普通的聚合關係中代表整體的物件負責代表部分的物件的生命週期
【程式碼體現】:成員變數
【箭頭及指向】:帶實心菱形的實線,菱形指向整體
6. 依賴(Dependency)
【依賴關係】:是一種使用的關係, 即一個類的實現需要另一個類的協助, 所以要儘量不使用雙向的互相依賴.
【程式碼表現】:區域性變數、方法的引數或者對靜態方法的呼叫
【箭頭及指向】:帶箭頭的虛線,指向被使用者
依賴關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的事物,反之不成立。在你想顯示一個事物使用另一個事物時使用。
一般用一條指向被依賴事物的虛線表示,UML圖如下:
通常情況下,依賴關係體現在某個類的方法使用另一個類作為引數。程式碼示例:
public class Screwdriver { //螺絲刀,作為人類的工具,是用來被人類使用的
}
public class Person{
public void screw(Screwdriver src){ //擰螺絲,需使用螺絲刀
}
}
Person類的screw()方法在使用時就得傳入一個Screwdriver型別的引數,這樣Screwdriver的改變就會影響到Person,因此Person與Screwdriver之間就是依賴關係(Person依賴於Screwdriver)。
各種關係的強弱順序:
泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴
下面這張UML圖,比較形象地展示了各種類圖關係:
總結
類間關係有很多種,在大的類別上可以分為兩種:縱向關係、橫向關係。縱向關係就是繼承關係,它的概念非常明確,也成為OO的三個重要特徵之一,這裡不過多的討論。
橫向關係較為微妙,按照UML的建議大體上可以分為四種:
依賴 (Dependency)
關聯 (Association)
聚合 (Aggregation)
組合 (Composition)
關於關聯,聚合,組合在實現上並沒有顯著區別,相區別他們只有通過判斷關係雙方之間的實際關係,如關係強弱、建立與銷燬之間有無必要關聯等。
實現方式區別:
(1) 依賴關係:關係物件出現在區域性變數或者方法的引數裡,或者關係類的靜態方法被呼叫
(2) 關聯關係:關係物件出現在例項變數中
(3) 聚合關係:關係物件出現在例項變數中
(4) 合成關係:關係物件出現在例項變數中
(5) Generalization: extends
(6) 實現: implements
--------------------- 本文來自 少主無翼 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/vickyway/article/details/7583545?utm_source=copy
最後說下,下面這篇部落格寫的很好,可以去看看