UML關係:繼承(泛化)、實現、依賴、關聯、聚合、組合的聯繫與區別 ...
分別介紹這幾種關係:
UML關係:繼承(泛化)、實現、依賴、關聯、聚合、組合的聯繫與區別
一、表示符號上的區別
二、具體區別與聯繫
1. 繼承/泛化(Generalization)
【泛化關係】:是一種繼承關係,表示一般與特殊的關係,它指定了子類如何特化父類的所有特征和行為。例如:老虎是動物的一種,即有老虎的特性也有動物的共性。繼承是類與類或者介面與介面之間最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計時一般沒有爭議性。
【箭頭指向】:帶三角箭頭的實線,箭頭指向父類
2.實現(Realization)
【實現關係】:是一種類與介面的關係,表示類是介面所有特征和行為的實現. 一個class類實現interface介面(可以是多個)的功能;實現是類與介面之間最常見的關係;在Java中此類關係通過關鍵字implements明確標識,在設計時一般沒有爭議性;
【箭頭指向】:帶三角箭頭的虛線,箭頭指向介面
3.依賴(Dependency)
【依賴關係】:是一種使用的關係,即一個類的實現需要另一個類的協助,所以要儘量不使用雙向的互相依賴. 一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;比如某個老師要授課,則需要有這麼一門課讓他教授,此時老師與課之間的關係就是依賴;
【代碼表現】:局部變數、方法的參數或者對靜態方法的調用
【箭頭及指向】:帶箭頭的虛線,指向被使用者
4.關聯(Association)
【關聯關係】:是類與類之間的聯接,它使一個類知道另一個類的屬性和方法。兩個類或者類與介面之間語義級別的一種強依賴關係,這種關係比依賴更強,一般是長期性的,而且雙方的關係一般是平等的。比如:老師與學生,丈夫與妻子關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
【代碼體現】:成員變數/全局變數
【箭頭及指向】:帶普通箭頭的實心線,指向被擁有者
上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關係為單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。
下圖為自身關聯:
5.聚合(Aggregation)
【聚合關係】:關聯關係的一種特例, 是強的關聯關係. 聚合是整體與部分的關係,且部分可以離開整體而單獨存在,他們可以具有各自的生命周期,部分可以屬於多個整體對象,也可以為多個整體對象共用,比如電腦與CPU、公司與員工、車和輪胎的關係等;表現在代碼層面,和關聯關係是一致的,只能從語義級別來區分;
聚合關係也是使用實例變數實現的. 從java 語法上是分不出關聯和聚合的. 關聯關係中兩個類是處於相同的層次, 而聚合關係中兩不類是處於不平等的層次, 一個表示整體, 一個表示部分.
【代碼體現】:成員變數/全局變數
【箭頭及指向】:帶空心菱形的實心線,菱形指向整體
6.組合(Composition)
【組合關係】:也是關聯關係的一種特例,是比聚合關係還要強的關係,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命周期結束也就意味著部分的生命周期結束;比如:公司和部門是整體和部分的關係,沒有公司就不存在部門合成關係不能共用。
組合跟聚合幾乎相同,唯一的區別就是"部分"不能脫離"整體"單獨存在,就是說,"部分"的生命期不能比"整體"還要長。
【代碼體現】:成員變數/全局變數
【箭頭及指向】:帶實心菱形的實線,菱形指向整體
各種關係的強弱順序:
泛化=實現>組合>聚合>關聯>依賴
下麵這張UML圖,比較形象地展示了各種類圖關係:
三、綜合比較
1.聚合與組合
(1)聚合與組合都是一種結合關係,只是額外具有整體-部分的意涵。
(2)部件的生命周期不同
聚合關係中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。再者,多個整件可以共用同一個部件。
組合關係中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且,多個整件不可以同時間共用同一個部件。
(3)聚合關係是"has-a"關係,組合關係是"contains-a"關係。
2.關聯和聚合
(1)表現在代碼層面,和關聯關係是一致的,只能從語義級別來區分。
(2)關聯和聚合的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的。
(3)關聯是一種結構化的關係,指一種對象和另一種對象有聯繫。
(4)關聯和聚合是視問題域而定的,例如在關心汽車的領域里,輪胎是一定要組合在汽車類中的,因為它離開了汽車就沒有意義了。但是在賣輪胎的店鋪業務里,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。
3.關聯和依賴
(1)關聯關係中,體現的是兩個類、或者類與介面之間語義級別的一種強依賴關係,比如我和我的朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的。
(2)依賴關係中,可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。
4.綜合比較
這幾種關係都是語義級別的,所以從代碼層面並不能完全區分各種關係;但總的來說,後幾種關係所表現的強弱程度依次為:
組合>聚合>關聯>依賴
結合了兩篇博客如下:
http://blog.sina.com.cn/s/blog_94c2c46a0102vaiz.html
http://blog.csdn.net/wzjking0929/article/details/51803110