在UML類圖中,常見的有以下幾種關係:泛化(Generalization),實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Depedency)。

1.泛化(Generalization)

【泛化關係】 :是一種繼承關係,表示一般與特殊的關係,它指定了子類如何特化父類的所有特徵和行為。例如:老虎是動物的一種,即有老虎的特性也有動物的共性

【箭頭指向】:帶三角箭頭的實線,箭頭指向父類


2.實現(Realization)

【實現關係】:是一種類與介面的關係,表示累是介面所有特徵和實現行為

【剪頭指向】:帶有三角箭頭的虛線,箭頭指向介面


3.關聯(Association)

【關聯關係】:是一種擁有的關係,它使一個累知道另一個累的屬性和方法;如:老師與學生,丈夫與妻子關聯可以是雙向的也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。

【程式碼實現】:成員變數

【箭頭指向】:帶普通箭頭的實心線,指向被擁有者


上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師,但學生與某課程間的關係與單向關聯,一名學生可能要上多門課程,課程是一個抽象的東西他不擁有學生。

下圖為自身關聯:


4.聚合(Aggregation)

【聚合關係】:是整體與部門的關係,且部分可以離開整體而單獨存在。如車和輪胎是整體和部分的關係,輪胎離開車仍然可以存在。

聚合關係是關聯關係的一種是強關聯關係;關聯和聚合在語法上無法區分,必須考察具體的邏輯關係。

【程式碼體現】:成員變數

【箭頭指向】:帶空心菱形的實心線,菱形指向整體


5.組合(Composition)

【組合關係】:是整體與部分的關係,但部分不能離開整體而單獨存在。如公司和部門是整體和部分的關係,沒有公司就不存在部門

組合關係是關聯關係的一種,是比聚合關係還要強的關係,它要求普通的聚合關係中代表整體的物件負責部分的物件的生命週期

【程式碼實現】:成員變數

【箭頭指向】:帶實心菱形的實線,菱形指向整體


6.依賴(Dependency)

【依賴關係】:是一種使用的關係,即是一個類的實現需要另一個類的協助,所有要儘量不使用雙向的互相依賴。

【程式碼表現】:區域性變數、方法的引數或者對靜態方法的呼叫

【箭頭指向】:帶箭頭的虛線,指向被使用者


各種關係的強弱順序:

泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴

下面這張UML圖,比較形象地展示了各種類圖的關係: