1. 程式人生 > >UML類關係(依賴,關聯,聚合,組合的區別)

UML類關係(依賴,關聯,聚合,組合的區別)

UML Class Relationships

由於最近看一些java書涉及到了uml類圖,因此查閱資料,思考後整理總結寫成如下文章
注重於理解,沒有如何實現(畫圖)的部分

Generalization/specialization

Generalization

一般而言是指繼承

Realization

Realization

表示一些已定義但是沒有任何實現細節的類,所以很多情況是指介面和抽象類

Dependency

Dependency

dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client)

依賴其實定義非常模糊,所以使用依賴只應該是在其他關係無法表示的時候:

  • 依賴通常體現為呼叫一個其他所依賴類的方法
  • 在程式碼中往往體現為依賴類作為函式引數或者區域性臨時變數
  • 舉例:人依賴車

Association

Association

  • 關聯暗示了依賴,與依賴的最大區別在於:關聯類通常作為一個類成員變數存在
  • 與依賴相似,關聯用來表示無法用聚合和組合表示的關係
  • 舉例:學生與老師的關係

Aggregation

Aggregation

聚合和組合是兩種部分整體的關聯關係

  • 我認為最重要的特點是成員可獨立
  • 舉例:班級與學生

Composition

Composition

  • 我認為最重要的特點是成員不可獨立
  • 成員必須依賴於整體才有意義
  • 舉例:汽車和引擎

關聯,聚合,組合的區別

從例子來說

  • 老師不能說包含學生,但老師帶很多學生;學生同樣不包含老師,但一個學生可以有很多老師
  • 班級包含很多學生,但學生自己可以獨立存在,所以並不是在班級中建立的學生,而是班級中有學生的reference
  • 汽車包含引擎,引擎脫離汽車之後毫無意義,所以引擎必須依賴於汽車,不可獨立存在

再說聚合和組合

  • 很多文章都會說組合意味著擁有共同的lifetime,這點我不完全同意,因為以汽車和引擎為例,即使某一汽車壞了,引擎也可以搬移到其他的汽車上使用,所以生命週期的說法在我看來不完全對,所以我也並沒有說在汽車裡建立引擎
  • 另一種說法是聚合的物件是可分享(share)的,而組合不是,這種說法我覺得比較靠譜,所以最後總結一下:
  • 聚合與組合區別可以考慮是否可獨立和是否可分享

再說關聯

  • 可以認為除了聚合和組合之外的類成員關係均認為是關聯

最後,我想補充一下

  • 以上對於不同關係的定義是儘量關係正交,儘可能不存在重疊
  • 這幾種關係是語義上的區別,關係之間可以相互轉化,所以一定要具體情況具體分析

相關推薦

用例關係包含、擴充套件、泛化 uml關係依賴關聯聚合組合、泛化

用例關係 用例圖使使用者 與開發人員交流的一種重要的方式,是對使用者需求的一種描述。開發人員從使用者的角度整體上理解系統的功能。 1)用例“註冊學生資訊”和“充值”與用例“使用者登陸”之間的關係就是包含關係。b和a本質不一樣,就是做b之前一定要做a,那a和b就是包含。

UML關係依賴關聯聚合組合泛化實現

轉自 https://blog.csdn.net/k346k346/article/details/59582926   在學習面向物件設計時,類關係涉及依賴、關聯、聚合、組合和泛化這五種關係,耦合度依次遞增。關於耦合度,可以簡單地理解為當一個類發生變更時,對其他類造成的影響程

UML關係依賴關聯聚合組合區別

UML Class Relationships 由於最近看一些java書涉及到了uml類圖,因此查閱資料,思考後整理總結寫成如下文章 注重於理解,沒有如何實現(畫圖)的部分 Generalization/specialization

之間的依賴關聯聚合組合關係

一、繼承關係     繼承指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力。在Java中繼承關係通過關鍵字extends明確標識,在設計時一般沒有爭議性。在UML類圖設計中,繼承用一條帶空心三角箭頭的實線表示,從子類指向父類,或者子介面指向父介面。  

UML關係泛化 、繼承、實現、依賴關聯聚合組合-轉

繼承、實現、依賴、關聯、聚合、組合的聯絡與區別 分別介紹這幾種關係: 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計

設計模式之UML圖以及關係泛化 、實現、依賴關聯聚合組合

類圖用於描述系統中所包含的類以及它們之間的相互關係,幫助人們簡化對系統的理解,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。接下來我們就來談談類圖的組成,在下一篇中我們將討論一下類圖之間的關係。 一、類圖的組成 1. 普通類 上圖

UML關係繼承、實現、依賴關聯聚合組合

原文地址:http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 類圖中包涵題目中的6中關係,用例圖中包涵泛化(繼承和實現的通稱),包含,擴張等 uml中關係很多,注意各個關係使用的是uml中的哪類圖即可,下面

UML關係泛化 、繼承、實現、依賴關聯聚合組合

繼承、實現、依賴、關聯、聚合、組合的聯絡與區別 分別介紹這幾種關係: 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計時一般沒有爭議性; 

UML關係泛化、依賴關聯聚合組合

一、泛化關係 表示類與類之間的繼承關係,介面與介面之間的繼承關係,或類對介面的實現關係。一般化的關係是從子類指向父類的,與繼承或實現的方法相反。 二、關聯關係 表示類與類之間的聯接,它使一個類知道另一個類的屬性和方法。體現的是兩個類、或者類與介面之間語義級別的一種強依賴關係

UML圖關系泛化 、繼承、實現、依賴關聯聚合組合-轉

定位 雙向 圖關系 bst 操作 att one 一般來說 eal 繼承、實現、依賴、關聯、聚合、組合的聯系與區別 分別介紹這幾種關系: 繼承 指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者

UML關係之 繼承、實現、依賴關聯聚合組合

原文出自 https://www.cnblogs.com/jiqing9006/p/5915023.html 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係;在Java

認識UML關係——依賴關聯聚合組合、泛化

在學習面向物件設計時,類關係涉及依賴、關聯、聚合、組合和泛化這五種關係,耦合度依次遞增。關於耦合度,可以簡單地理解為當一個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強。 下面根據個人理解,嘗試講解這五種類關係。 1.依賴(D

幾種類間關係:繼承、實現、依賴關聯聚合組合UML實現圖

轉自:http://www.cnblogs.com/yyyyy5101/archive/2011/03/11/1981078.html 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介

面向物件設計物件之間關係---依賴關聯聚合組合

在學習面向物件設計物件關係時,依賴、關聯、聚合和組合這四種關係之間區別比較容易混淆。特別是後三種,僅僅是在語義上有所區別,所謂語義就是指上下文環境、特定情景等。他們在程式語言中的體現卻是基本相同的,但是基本相同並不等於完全相同,這一點在我的前一篇博文《設計模式中類的關係》

Java 中的繼承、實現、依賴關聯聚合組合

繼承(又稱泛化) 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間 最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計時一般沒有爭議性; 實現 指的是一

面向物件之依賴關聯聚合組合

如果你確定兩件物件之間是is-a的關係,那麼此時你應該使用繼承;比如菱形、圓形和方形都是形狀的一種,那麼他們都應該從形狀類繼承而不是聚合。  如果你確定兩件物件之間是has-a的關係,那麼此時你應該使用聚合;比如電腦是由顯示器、CPU、硬碟等組成的,那麼你應該把顯示器、CP

泛化、依賴關聯聚合組合

時間久了不用了,慢慢慢慢也就淡忘了,寫一篇部落格記錄下 借來一張《大話設計模式》圖: 類的關係一般分為泛化(繼承,實現),依賴,關聯,聚合,組合 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承

23種設計模式-依賴關聯聚合組合之間區別的理解

 在學習面向物件設計物件關係時,依賴、關聯、聚合和組合這四種關係之間區別比較容易混淆。特別是後三種,僅僅是在語義上有所區別,所謂語義就是指上下文環境、特定情景等。他們在程式語言中的體現卻是基本相同的,但是基本相同並不等於完全相同,這一點在我的前一篇博文《設計模式中類的關係

UML圖中常見的幾種關係:泛化、 實現、關聯聚合組合

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

SparkStreaming部分:OutPutOperatorSaveAsHadoopFile運算元實際上底層呼叫textFileStream讀取的跟前兩種有一些區別【Java版純程式碼】

package streamingOperate.output; import java.util.Arrays; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; imp