对象集合,对象聚合,对象关联和对象组合之间有什么区别?

时间:2015-03-20 20:57:54

标签: oop repository-pattern semantics aggregation poeaa

我看到这些术语已被使用,我认为我自己对它们的使用可能不正确。我想知道他们究竟是如何不同的。

对象集合 - ???

对象聚合 - ???

对象关联 - ???

对象组合 - ???

在讨论ORM,数据映射器和存储库时,似乎最近出现了这些术语。例如,福勒提到object collections here。这些术语具体是什么意思,我应该如何有效地使用它们?

2 个答案:

答案 0 :(得分:1)

对象集合

是一个更广泛的术语,而不是"数组",但是,包括"数组"。集合本身就是对象,其主要目标是存储其他几个对象,以及依赖于每种集合类型的其他功能,例如插入顺序或提取顺序(如果允许重复项目等),等等。

对象关联

也是一个非常通用的术语,它暗示了2个对象之间存在概念关系。还有几种"协会",具有更具体的目标。

对象聚合

对象关联,其中对象与另一个对象相关。它们可以独立存在,一个的创建或破坏不会影响另一个,尽管有些操作是两个对象交互的结果。

对象组合

对象关联,其中对象是另一个主对象的一部分。子对象不能独立存在,通常是它的创建或破坏,它由主要对象管理。

注意:

注意:Object AggregationObject CompositionObject Association(s)的种类,但不是唯一的。

答案 1 :(得分:0)

通过一些例子添加到umlcat的答案:

as mentioned here in this great post
示例1:公司是人员的聚合。公司是账户的组合。当公司停止营业时,其账户不再存在,但其人员仍然存在。
示例2:文本编辑器拥有一个缓冲区(组合)。文本编辑器使用文件(聚合)。关闭文本编辑器时,将销毁缓冲区,但不会销毁文件本身。

另外,我想说值得注意的是,如果您不关心公司独立存在的公司,那么人们可能会被转移到公司内部(现在组合)。 (这意味着您的应用程序仅允许从公司上下文中创建人员。我不认为PHP允许您实际在类中定义类。您最终只需要查看应用程序中的不同使用区域以确定如果您正在使用合成或聚合。)