我想了解合成与聚合之间的区别。
有没有人知道一个解释所有关系的UML类图的网站?
答案 0 :(得分:4)
组合和聚合与级联删除行为有关。
除了父母之外,儿童对象的生命是否有自己的生命?如果是,则需要聚合。
如果父母被删除,孩子是否也需要删除?如果是的话,你需要合成。
所以假设你有一个模型,其中有一个School类,一个Building类和一个Student类。学校与建筑有一对多的关系,与学生有一对多的关系。
学校与建筑的关系是一个组合的例子。如果你关闭学校,你可能会决定推土机。
学校与学生的关系是聚合。如果你关闭学校,你肯定不会决定谋杀所有的学生。
你可以阅读鲍勃·马丁叔叔对此发表的评论here。
答案 1 :(得分:2)
不同之处在于对象部分的生命周期。
组合可以看作是聚合的特例。
根据The UML User Guide(词汇表):
composition: A form of aggregation with strong ownership and coincident lifetime of the parts by the whole
答案 2 :(得分:1)
聚合和组合都代表“有”关系。两者之间的区别在于组合是指独占所有权。例如,交易“具有”交易ID号,并且该交易是唯一具有该交易ID号的交易,该ID号是独占到交易。交易也“具有”交易日期,但许多交易也可能具有相同的交易日期。由于交易日期可以在多个交易之间共享,因此它不是独占。
当您在UML类图上绘制这两种关系类型时,组合关系将用填充的菱形表示,其中聚合关系将由未填充的菱形表示。
本书Introduction to Java Programming详细介绍了这一主题。