聚合,组合和依赖之间有什么区别?
答案 0 :(得分:413)
聚合表示子项可以独立于父项存在的关系。示例:Class(父级)和Student(子级)。删除班级,学生仍然存在。
组合意味着孩子不能独立于父母而存在的关系。示例:住宅(父母)和房间(儿童)。房间不是独立于房屋。
以上两种是收容的形式(因此是父子关系)。
依赖是一种较弱的关系形式,在代码术语中表示一个类使用另一个参数或返回类型。
依赖是关联的一种形式。
答案 1 :(得分:129)
聚合和组合几乎完全相同,只是当孩子的生命完全由父母控制时使用组合。 / p>
聚合
Car -> Tires
Tires
可以从Car
对象中取出并安装在另一个对象上。此外,如果汽车总计,轮胎不一定要被摧毁。
作文
Body -> Blood Cell
当Body
对象被销毁时,BloodCells
会被摧毁。
<强>依赖强>
两个对象之间的关系,其中一个对象可能会影响另一个对象。
答案 2 :(得分:42)
聚合 - 可分离的部分到整体。该部分具有自己的身份,与其所属的部分分开。您可以选择该部分并将其移动到另一个对象。 (现实世界的例子:轮子 - &gt;汽车,血细胞 - &gt;身体)
构图 - 整体的不可分离部分。您无法将零件移动到另一个对象。更像是一个财产。 (真实世界的例子:曲线 - &gt;道路,个性 - &gt;人,max_speed - &gt;汽车,对象的属性 - &gt;对象)
请注意,在一个设计中作为聚合的关系可以是另一个设计中的聚合。这完全取决于如何在特定设计中使用该关系。
依赖 - 对变更敏感。 (雨量 - >天气,头部位置 - >体型)
注意:“血细胞” - &gt;血液“可能是”组成“因为血细胞不能存在而没有被称为血液的实体。”血液“ - &gt;身体”可能是“聚集”,因为血液可以存在而没有被称为身体的实体。
答案 3 :(得分:6)
与合成关系关联的对象不会存在于包含对象之外。 示例是约会,所有者(人)或日历;一个TestResult和一个病人。
另一方面,包含对象的聚合的对象可以存在于包含对象的对象之外。 例子是门和房子;员工和部门。
依赖与协作或委派相关,其中对象从另一个对象请求服务,因此依赖于该对象。作为服务的客户端,您希望服务接口保持不变,即使提供了未来的服务。
答案 4 :(得分:5)
聚合和组合是OO世界中大多数人通过UML获得的术语。 UML在定义这些术语方面做得非常糟糕,例如Henderson-Sellers和Barbier(“这是什么叫聚合?”,“统一建模语言中整体关系的形式化”) “)。我不认为如果你有兴趣符合UML,那么可以给出一个连贯的聚合和组合定义。我建议你看看引用的作品。
关于依赖性,这是类型(而不是对象)之间的高度抽象关系,几乎可以表示任何事物。
答案 5 :(得分:1)
一个对象可能包含另一个对象作为其属性的一部分。
所以遏制不一定是物理的。例如,计算机系统有保修。
答案 6 :(得分:0)
遏制: - 这里访问内部对象我们必须使用外部对象。我们可以重用包含的对象。 聚合: - 这里我们可以一次又一次地访问内部对象而不使用外部对象。