2012-12-01 33 views
1

我發現這兩個示例在概念上是相同的 - 但其中一個是組合和另一個聚合。聚合和組合 - 錯誤的教程示例

first example中,'class(has-a)students'是一個組合。

一個班級包含學生。沒有一個班級,學生就不能存在。 班上和學生之間存在着構成。

second example中,關係'department(has-a)professors'是一個聚合。

如果大學關閉,該部門將不再存在,但 在這些部門的教授將繼續存在

在我看來,第一種是完全錯誤的。請注意,在this的評論部分SO問題@TallPaul也在質疑第一個例子。我認爲在實踐中,它會從系統中刪除每個學期後所有入學的學生。而且,學生可能不得不由初始化的類創建,因爲C++中的構造通常是作爲私有屬性(而不是指針)實現的。我對嗎?第一個例子有意義嗎?

回答

2

沒有絕對的事實,這一切都取決於你正在建模的系統。您可以創建一個系統,讓學生成爲僅存在於特定班級中的實例,並且當班級被刪除時,學生也會被刪除。例如,當您不想在課程之間存儲學生信息時,這可能很有意義。

+0

只需重命名'student'到'類taker'或類似的東西,第一個例子中才有意義。 – SomeWittyUsername

0

是的,這些都是弱的例子,一個類必須有一個主題將是一個更好的例子組成。一個班級和學生之間的關係是聚合的,因爲兩者的生活時間不同。

參見[Java中UML協會對於更詳細的例子1