UML類圖中的關係分爲四種:泛化、依賴、關聯、實現;關聯關係又能夠細化爲聚合和組合。
1、泛化(Generalization)
泛化是父類和子類之間的關係,子類繼承父類的全部結構和行爲。在子類中能夠增長新的結構和行爲,也能夠覆寫父類的行爲。
通常用一個帶空心箭頭的實線表示泛化關係,UML圖以下:
工具
2、依賴(Dependency)
依賴關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的事物,反之不成立。在你想顯示一個事物使用另外一個事物時使用。
通常用一條指向被依賴事物的虛線表示,UML圖以下:
一般狀況下,依賴關係體如今某個類的方法使用另外一個類做爲參數。代碼示例:spa
Person類的screw()方法在使用時就得傳入一個Screwdriver類型的參數,這樣Screwdriver的改變就會影響到Person,所以Person與Screwdriver之間就是依賴關係(Person依賴於Screwdriver)。
3、關聯(Association)
是一種結構關係,說明一個事物的對象與另外一個事物的對象相聯繫。給定有關聯的兩個類,能夠從 一個類的對象獲得另外一個類的對象。關聯有兩元關係和多元關係。兩元關係是指一種一對一的關係,多元關係是一對多或多對一的關係。兩個類之間的簡單關聯表示 了兩個同等地位類之間的結構關係。當你想要表示結構化關係時使用關聯。(能夠想一想Hibernate的關聯關係)
通常用實線鏈接有關聯的同一個類或不一樣的兩個類。UML圖以下:
.net
3.1 聚合(Aggregation)對象
學校是總體,而學生是部分。學校與學生都是能夠獨立存在的,之間沒有什麼必然的聯繫。所以學校與學生就是聚合關係。
3.2 組合(Composition)blog
4、實現(Realization)
實現關係指定兩個實體之間的一個合約。換言之,一個實體定義一個合約,而另外一個實體保證履行該合約。對類來講,就是一個類實現了一個接口。
通常用一條指向接口的虛線表示,UML圖以下:
實現對應Java中的實現接口(implements)。示例代碼:
public interface Person{
}
public class Student implements Person{
}
這個和泛化同樣很好理解。
5、總結
類間關係有不少種,在大的類別上能夠分爲兩種:縱向關係、橫向關係。縱向關係就是繼承關係,它的概念很是明確,也成爲OO的三個重要特徵之一,這裏不過多的討論。
橫向關係較爲微妙,按照UML的建議大致上能夠分爲四種:
依賴 (Dependency)
關聯 (Association)
聚合 (Aggregation)
組合 (Composition)
關於關聯,聚合,組合在實現上並無顯著區別,相區別他們只有經過判斷關係雙方之間的實際關係,如關係強弱、建立與銷燬之間有無必要關聯等。
它們的強弱關係是沒有異議的:依賴 < 關聯 < 聚合 < 組合<泛化(繼承)
實現方式區別:
(1) 依賴關係:關係對象出如今局部變量或者方法的參數裏,或者關係類的靜態方法被調用
(2) 關聯關係:關係對象出如今實例變量中
(3) 聚合關係:關係對象出如今實例變量中
(4) 合成關係:關係對象出如今實例變量中
(5) Generalization: extends
(6) 實現: implements
原文出處:http://blog.csdn.net/hqshaozhu/article/details/7583545繼承