天天看點

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

一、六大關系

繼承/泛化(Generalization):

指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關系;在Java中此類關系通過關鍵字

extends

明确辨別,在設計時一般沒有争議性;

實作(Realization):

指的是一個class類實作interface接口(可以是多個)的功能;實作是類與接口之間最常見的關系;在Java中此類關系通過關鍵字

implements

明确辨別,在設計時一般沒有争議性;

依賴(Dependency):

可以簡單的了解,就是一個類A使用到了另一個類B,而這種使用關系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;

比如:某人要過河,需要借用一條船,此時人與船之間的關系就是依賴;

表現在代碼層面:

為類B作為參數被類A在某個method方法中使用;

關聯(association):

他展現的是兩個類、或者類與接口之間語義級别的一種強依賴關系,比如我和我的朋友;這種關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的、關聯可以是單向、雙向的;

表現在代碼層面:

為被關聯類B以類屬性的形式出現在關聯類A中

也可能是關聯類A引用了一個類型為被關聯類B的全局變量

聚合(aggregation):

聚合是關聯關系的一種特例,他展現的是整體與部分、擁有的關系,即

has - a

的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享;

比如:計算機與CPU、公司與員工的關系等;

表現在代碼層面:和關聯關系是一緻的,隻能從語義級别來區分;

組合(composition):

組合也是關聯關系的一種特例,他展現的是一種

contains - a

的關系,這種關系比聚合更強,也稱為強聚合;他同樣展現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束;

比如:你和你的大腦;

表現在代碼層面:和關聯關系是一緻的,隻能從語義級别來區分;

對于繼承、實作這兩種關系沒多少疑問,他們展現的是一種類與類、或者類與接口間的縱向關系;

其他的四者關系則展現的是類與類、或者類與接口間的引用、橫向關系,是比較難區分的,有很多事物間的關系要想準備定位是很難的,前面也提到,這幾種關系都是語義級别的,是以從代碼層面并不能完全區分各種關系;

但總的來說,後幾種關系所表現的強弱程度依次為:

組合>聚合>關聯>依賴

聚合跟組合其實都屬于關聯 隻不過它們是兩種特殊的關聯 因為本是同根生 是以它們之間難免會有相似之處 下面讓我們一起來看一下它們之間有何不同

聚合與組合的概念相信不用我在此贅述大家就已經了解了 下面直接上例子

程老師的《大話》裡舉大那個大雁的例子很貼切 在此我就借用一下 大雁喜歡熱鬧害怕孤獨 是以它們一直過着群居的生活 這樣就有了雁群 每一隻大雁都有自己的雁群 每個雁群都有好多大雁 大雁與雁群的這種關系就可以稱之為聚合 另外每隻大雁都有兩隻翅膀 大雁與雁翅的關系就叫做組合 有此可見 聚合的關系明顯沒有組合緊密 大雁不會因為它們的群主将雁群解散而無法生存 而雁翅就無法脫離大雁而單獨生存——組合關系的類具有相同的生命周期

二、關系之間的差別 ★

1.聚合與組合

(1)聚合與組合都是一種結合關系,隻是額外具有整體-部分的意涵。

(2)部件的生命周期不同

聚合關系中,整件不會擁有部件的生命周期,是以整件删除時,部件不會被删除。再者,多個整件可以共享同一個部件。

組合關系中,整件擁有部件的生命周期,是以整件删除時,部件一定會跟着删除。而且,多個整件不可以同時間共享同一個部件。

(3)聚合關系是“has - a”關系,組合關系是“contains - a”關系。

2.關聯和聚合

(1)表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。

(2)關聯和聚合的差別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的。

(3)關聯是一種結構化的關系,指一種對象和另一種對象有聯系。

(4)關聯和聚合是視問題域而定的,例如在關心汽車的領域裡,輪胎是一定要組合在汽車類中的,因為它離開了汽車就沒有意義了。但是在賣輪胎的店鋪業務裡,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。

3.關聯和依賴

(1)關聯關系中,展現的是兩個類、或者類與接口之間語義級别的一種強依賴關系,比如我和我的朋友;這種關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的。

(2)依賴關系中,可以簡單的了解,就是一個類A使用到了另一個類B,而這種使用關系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。

三、六大聯系線條/箭頭 ★

泛化 /繼承:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

實作:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

依賴:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

關聯:

直接關聯:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

普通關聯:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

聚合:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

組合:

UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★
UML類圖關系(泛化 、繼承、實作、依賴、關聯、聚合、組合)一、六大關系二、關系之間的差別 ★三、六大聯系線條/箭頭 ★

繼續閱讀