我看到使用了这些术语,我认为我自己对它们的使用可能不正确。我想知道它们到底有什么不同。
对象集合- ???
对象聚合- ???
对象关联- ???
对象组合- ???
似乎这些术语是最近在谈论 ORM、数据映射器和存储库时出现的。例如,Fowler在这里提到了对象集合。这些术语的具体含义是什么,我应该如何在口语中有效地使用它们?
我看到使用了这些术语,我认为我自己对它们的使用可能不正确。我想知道它们到底有什么不同。
对象集合- ???
对象聚合- ???
对象关联- ???
对象组合- ???
似乎这些术语是最近在谈论 ORM、数据映射器和存储库时出现的。例如,Fowler在这里提到了对象集合。这些术语的具体含义是什么,我应该如何在口语中有效地使用它们?
对象集合
是一个比“数组”更广泛的术语,但包括“数组”。集合本身就是对象,它的主要目标是存储其他几个对象,以及依赖于每个集合类型的其他特性,例如插入顺序或提取顺序,是否允许重复项等。
对象关联
也是,一个非常笼统的术语,它暗示着 2 个对象之间存在概念上的关系。还有几种“协会”,具有更具体的目标。
对象聚合
是一种对象关联,其中一个对象与另一个对象相关。它们可以独立存在,一个对象的创建或销毁不会影响另一个对象,尽管某些操作是两个对象交互的结果。
对象组合
是一种对象关联,其中一个对象是另一个主要对象的一部分。子对象不能独立存在,通常是创建或销毁,由主对象管理。
笔记:
注意:Object Aggregation
andObject Composition
是Object Association
(s) 的种类,但是,并不是唯一的。
要添加到 umlcat 的答案,请举一些例子:
(正如这篇伟大的帖子中提到的)
示例 1:公司是人员的集合。公司是账户的组合。当一家公司停止开展业务时,其账户将不复存在,但其人员继续存在。
示例 2:文本编辑器拥有一个缓冲区(组合)。文本编辑器使用文件(聚合)。当文本编辑器关闭时,缓冲区被销毁,但文件本身并没有被销毁。
另外,我会说值得注意的是,如果您不关心People 是否独立于公司,则可以将其移到公司内部(现在是组合)严格使用。(这意味着您的应用程序只允许从公司上下文中创建人员。我不认为 PHP 允许您在类中实际定义类。您最终只需要查看应用程序中的不同使用领域来确定如果您使用组合或聚合。)