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