對依賴 關聯 聚合和組合之間區別的理解

2021-07-26 08:32:37 字數 1284 閱讀 3542

首先看一看書上對這四種關係的定義:

依賴(dependency)關係是類與類之間的聯接。依賴關係表示乙個類依賴於另乙個類的定義。例如,乙個人(person)可以買車(car)和房子(house),person類依賴於car類和house類的定義,因為person類引用了car和house。與關聯不同的是,person類裡並沒有car和house型別的屬性,car和house的例項是以參量的方式傳入到buy()方法中去的。

關聯(association)關係是類與類之間的聯接,它使乙個類知道另乙個類的屬性和方法。關聯可以是雙向的,也可以是單向的。

聚合(aggregation) 關係是關聯關係的一種,是強的關聯關係。聚合是整體和個體之間的關係。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關係便整體和個體的關係。與關聯關係一樣,聚合關係也是通過例項變數實現的。但是關聯關係所涉及的兩個類是處在同一層次上的,而在聚合關係中,兩個類是處在不平等層次上的,乙個代表整體,另乙個代表部分。

組合(composition) 關係是關聯關係的一種,是比聚合關係強的關係。它要求普通的聚合關係中代表整體的物件負責代表部分物件的生命週期,組合關係是不能共享的。代表整體的物件需要負責保持部分物件和存活,在一些情況下將負責代表部分的物件湮滅掉。代表整體的物件可以將代表部分的物件傳遞給另乙個物件,由後者負責此物件的生命週期。換言之,代表部分的物件在每乙個時刻只能與乙個物件發生組合關係,由後者排他地負責生命週期。部分和整體的生命週期一樣。

以上關係的耦合度依次增強(關於耦合度的概念,這裡可以暫時理解為當乙個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經知道,依賴關係實際上是一種比較弱的關聯,聚合是一種比較強的關聯,而組合則是一種更強的關聯,所以籠統的來區分的話,實際上這四種關係、都是關聯關係。

依賴關係比較好區分,它是耦合度最弱的一種,如下面的例子:driver類依賴於car類,因為這個關係很普遍,而在uml中我們要求必須將關係說清楚,否則容易產生很多歧義。

依然使用driver和car的例子,關聯關係來表達的話就是:不管車是不是我的,我是個司機,別人給我什麼車我就開什麼車,我使用這個車。

聚合關係是是一種比較強的關聯關係,物件之間存在著整體與部分的關係。假如說車是一輛私家車,是司機財產的一部分。那這個時候我們就可以使用聚合關係來表達車和司機之間的關係。

假如賦予如下語義:車是司機的必須有的財產,要想成為乙個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不幹司機了,這個車就砸了,別人誰也別想用。那就表示組合關係了。

所以,關聯、聚合、組合只能配合語義,結合實際情況才能夠判斷出來。

依賴 關聯 聚合 組合 的區別

1.例項化 依賴 a將b作為區域性變數進行使用.程式1 void a foo 2.關聯 a與b存在一定的關係.這裡只考慮單向導航.關聯在 中有多種表現形式.第一種,作為引數 程式2 void a foo b b b b or b b 第二種,作為成員變數 程式3 class a void foo p...

依賴 關聯 聚合 組合

依賴 關聯 聚合 組合 1 依賴 語義 a use b。依賴是區域性變數 形參 靜態方法 返回引數 生命週期中物件依賴關係 當f方法被呼叫時,a與b產生依賴關係,當呼叫結束,依賴關係結束 class a a 虛線箭頭指向 b 2 關聯 class soldier 語義 a has b 士兵可以有槍,...

依賴 關聯 組合 聚合

聚合 指的是整體與部分的關係。通常在定義乙個整體類後,再去分析這個整體類的組成 結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關係。例如乙個航母編 隊包括海空母艦 驅護艦艇 艦載飛機及核動力攻擊潛艇等。需求描述中 包含 組 成 分為 部分 等詞常意味著聚合關係。組合 也表示類之間整體和部...