2011-11-10 55 views
5

我很難理解這些涉及到設計一個類圖的情況,從我所知道的構成是一個「有一個」關係但聚合?我不知道它是什麼。還有一件事我什麼時候才能知道在類圖中使用Composition?什麼時候才能知道在類圖中使用Aggregation?一個例子將高度讚賞。類圖中的組合和聚合

回答

21

聚合和組合之間的主要區別在於「有-a」關係的屬性。它「強大或弱小」。

聚合「有-α」關係是「弱類型」。弱意味着聚合器的鏈接組件可能在聚合生命週期中存活,或者可能以其他方式訪問。一個簡單的例子就是擁有會員的足球俱樂部。如果俱樂部得到了解決,你仍然得到了成員 - 實際上也可能是其他俱樂部的成員,因此保持活力。

構成「具有」的關係是「強類型」。強烈的意義,一個人不能存在而另一個不存在。組件的生命週期直接與「父」關聯。一個例子就是有房的房子。如果你決定把房子拆掉,你也會失去你的房間。

也許有點抽象,但我認爲這是它背後的想法。

+0

我忘了問,關聯怎麼樣? – user962206

0

查看對上述問題的回答here,herehere

個人我不使用聚合。語義太弱而無用。它會導致比解決問題更多的問題。只有一個地方,它具有明確定義和潛在有用的屬性,可以將它與簡單的二元關聯區分開來(請參閱腳註)。

組合可能很有用,因爲它定義了關於不變性和生命週期管理的重要屬性(請參閱上面的第一個鏈接)。我很幸福地活了很多年,不需要使用Aggregation。

hth。

腳註。如果需要對遞歸樹關係進行建模,則可以應用聚合。一部分遞歸地分解成子部分。聚合說,不存在循環關係,即一個部分不能直接或間接地成爲其自身的子部分。然而,大多數人閱讀模型不太可能知道這一點。所以你需要添加評論。這意味着你應該堅持二元關聯,避免使用聚合的困惑。