【发布时间】:2009-05-01 20:11:14
【问题描述】:
组合和聚合有什么区别? 谁能给我这个OOAD的样本吗?
【问题讨论】:
-
太好了,现在我什至无法删除我的自己的 cmets?
组合和聚合有什么区别? 谁能给我这个OOAD的样本吗?
【问题讨论】:
考虑一个学生、学生的大脑和学生就读的学校。
大脑是学生的一部分。如果学生被摧毁,大脑也会被摧毁。这是作曲。
学生有一所学校。学生在学校的毁灭中幸存下来,反之亦然。这是聚合。
【讨论】:
“聚合和组合都是特殊类型的关联。聚合用于表示所有权或整体/部分关系,组合用于表示更强大的所有权形式。通过组合,我们可以得到部分与整体。复合对象对其部分在创建和销毁方面的处置负有唯一责任。
此外,聚合端的多重性不得超过一;即,它是非共享的。一个对象一次只能是一个组合的一部分。如果复合体被破坏,它必须要么破坏它的所有部分,要么将它们的责任交给其他对象。可以在设计复合对象时知道没有其他对象会破坏其部分。
组合可用于按值聚合建模,这在语义上等同于属性。事实上,在早期的 UML 草案中,组合最初被称为按值聚合,“正常”聚合被认为是按引用聚合。定义略有变化,但总体思路仍然适用。聚合和组合之间的区别更多是一种设计概念,在分析过程中通常不相关。” 约翰·摩尔
【讨论】:
您的问题的相关答案在这里:http://ootips.org/uml-hasa.html
简而言之:组合和聚合都是由部分和整体组成的非循环has-a关系。不同之处在于,在组合中,整体负责创建(和删除)其部分。
【讨论】: