聚合和组合 - 错误的教程示例

时间:2012-12-01 01:04:53

标签: uml diagram composition aggregation

我发现这两个例子在概念上是相同的 - 但一个是组合而另一个是聚合。

first example中,关系'class(has-a)students'是一个组合。

  

课程包含学生。没有课,学生就不能存在。   班级与学生之间存在着作文。

second example中,关系'部门(has-a)教授'是一个聚合。

  

如果大学关闭,部门将不再存在,但是   这些部门的教授将继续存在

在我看来,第一个是完全错误的。请注意,在this的评论部分,问题@TallPaul也在质疑第一个例子。我认为在实践中,它会删除每个学期后从系统中注册的所有学生。此外,学生可能必须在初始化时由类创建,因为C ++中的组合通常实现为私有属性(而不是指针)。我对吗?第一个例子是否有意义?

2 个答案:

答案 0 :(得分:2)

没有绝对的事实,这一切都取决于你正在建模的系统。您可以创建一个系统,其中学生是仅存在于特定班级中的实例,当班级被删除时,学生也是如此。例如,当您不想在班级之间存储学生信息时,这可能是有意义的。

答案 1 :(得分:0)

是的,那些是弱的例子,一个Class必须有一个Subject对于Composition来说是一个更好的例子。班级与学生之间的关系是聚合,因为两者的生命周期是不同的。

有关更详细的示例1

,请参阅[Java中的UML关联]