我很难理解UML中的组合和聚合之间的区别。有人可以给我一个很好的比较和对比吗?我也很想学习识别代码之间的区别和/或看一个简短的软件/代码示例。
编辑:我问的部分原因是因为我们在工作中正在进行反向文档活动。我们已经编写了代码,但是我们需要返回并为代码创建类图。我们只想正确捕获关联。
聚集与构成之间的区别取决于上下文。
以另一个答案中提到的汽车示例为例-是的,确实汽车尾气可以“独立”站立,因此可能与汽车的成分不同-但这取决于应用程序。如果你构建的应用程序实际上必须处理独立的汽车尾气(汽车商店管理应用程序?),那么聚合将是你的选择。但是,如果这是一个简单的赛车游戏,并且汽车尾气仅充当汽车的一部分-那么,构图会很好。
棋盘?同样的问题。没有棋盘,只有在某些应用程序中,棋子才不存在。在其他玩具制造商中,象棋棋子肯定不能组成棋盘。
尝试将合成/聚合映射到你喜欢的编程语言时,情况变得更糟。在某些语言中,区别可能更容易注意到(在简单的情况下,“按引用”与“按值”对比),但在另一些语言中则可能根本不存在。
还有最后的建议吗?不要在这个问题上浪费太多时间。这是不值得的。这种区别在实践中几乎没有用(即使你有一个完全清晰的“组成”,由于技术原因,例如缓存,你可能仍希望将其实现为聚合)。