1

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

在第一个示例中,关系“class (has-a) students”是一个组合。

一个班级包含学生。没有班级,学生就无法存在。班级和学生之间存在着组合。

第二个示例中,关系“部门(有)教授”是一个聚合。

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

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

4

2 回答 2

2

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

于 2012-12-01T20:30:36.327 回答
0

是的,这些都是弱例子,一个类必须有一个主题将是组合的一个更好的例子。班级和学生之间的关系是聚合,因为两者的生命周期不同。

有关更详细的示例,请参阅 [Java 中的 UML 关联] 1

于 2012-12-03T16:54:05.240 回答