我发现这两个例子在概念上是相同的 - 但一个是组合而另一个是聚合。
在first example中,关系'class(has-a)students'是一个组合。
课程包含学生。没有课,学生就不能存在。 班级与学生之间存在着作文。
在second example中,关系'部门(has-a)教授'是一个聚合。
如果大学关闭,部门将不再存在,但是 这些部门的教授将继续存在
在我看来,第一个是完全错误的。请注意,在this的评论部分,问题@TallPaul也在质疑第一个例子。我认为在实践中,它会删除每个学期后从系统中注册的所有学生。此外,学生可能必须在初始化时由类创建,因为C ++中的组合通常实现为私有属性(而不是指针)。我对吗?第一个例子是否有意义?
答案 0 :(得分:2)
没有绝对的事实,这一切都取决于你正在建模的系统。您可以创建一个系统,其中学生是仅存在于特定班级中的实例,当班级被删除时,学生也是如此。例如,当您不想在班级之间存储学生信息时,这可能是有意义的。
答案 1 :(得分:0)
是的,那些是弱的例子,一个Class必须有一个Subject对于Composition来说是一个更好的例子。班级与学生之间的关系是聚合,因为两者的生命周期是不同的。
有关更详细的示例1
,请参阅[Java中的UML关联]