java_UML:繼承/泛化、實現、依賴、關聯、聚合、組合的聯繫與區別 (2016-07-12)

分別介紹這幾種關係:html

UML關係:繼承(泛化)、實現、依賴、關聯、聚合、組合的聯繫與區別java

1、表示符號上的區別spa

2、具體區別與聯繫 .net

1. 繼承/泛化(Generalization設計

  【泛化關係】:是一種繼承關係,表示通常與特殊的關係,它指定了子類如何特化父類的全部特徵和行爲。例如:老虎是動物的一種,即有老虎的特性也有動物的共性。繼承是類與類或者接口與接口之間最多見的關係;在Java中此類關係經過關鍵字extends明確標識,在設計時通常沒有爭議性。htm

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

  2.實現(Realizationblog

  【實現關係】:是一種類與接口的關係,表示類是接口全部特徵和行爲的實現. 一個class類實現interface接口(能夠是多個)的功能;實現是類與接口之間最多見的關係;在Java中此類關係經過關鍵字implements明確標識,在設計時通常沒有爭議性;繼承

  【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口接口

3.依賴(Dependency)

  【依賴關係】:是一種使用的關係,即一個類的實現須要另外一個類的協助,因此要儘可能不使用雙向的互相依賴. 一個類A使用到了另外一個類B,而這種使用關係是具備偶然性的、臨時性的、很是弱的,可是B類的變化會影響到A;好比某個老師要授課,則須要有這麼一門課讓他教授,此時老師與課之間的關係就是依賴;

  【代碼表現】:局部變量、方法的參數或者對靜態方法的調用

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

  4.關聯(Association)

【關聯關係】:是類與類之間的聯接,它使一個類知道另外一個類的屬性和方法。兩個類或者類與接口之間語義級別的一種強依賴關係,這種關係比依賴更強,通常是長期性的,並且雙方的關係通常是平等的。好比:老師與學生,丈夫與妻子關聯能夠是雙向的,也能夠是單向的。雙向的關聯能夠有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。

  【代碼體現】:成員變量/全局變量

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

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

  下圖爲自身關聯:

  5.聚合(Aggregation

  【聚合關係】:關聯關係的一種特例, 是強的關聯關係. 聚合是總體與部分的關係,且部分能夠離開總體而單獨存在,他們能夠具備各自的生命週期,部分能夠屬於多個總體對象,也能夠爲多個總體對象共享,好比計算機與CPU、公司與員工、車和輪胎的關係等;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分;

聚合關係也是使用實例變量實現的. java 語法上是分不出關聯和聚合的. 關聯關係中兩個類是處於相同的層次, 而聚合關係中兩不類是處於不平等的層次, 一個表示總體, 一個表示部分.

  【代碼體現】:成員變量/全局變量

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

  6.組合(Composition)

  【組合關係】:也是關聯關係的一種特例,是比聚合關係還要強的關係,也稱爲強聚合;他一樣體現總體與部分間的關係,但此時總體與部分是不可分的,總體的生命週期結束也就意味着部分的生命週期結束;好比:公司和部門是總體和部分的關係,沒有公司就不存在部門合成關係不能共享。

組合跟聚合幾乎相同,惟一的區別就是"部分"不能脫離"總體"單獨存在,就是說,"部分"的生命期不能比"總體"還要長。

【代碼體現】:成員變量/全局變量

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

  各類關係的強弱順序:    

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

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

3、綜合比較

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

相關文章
相關標籤/搜索