聚合,组合和依赖之间有什么区别?

时间:2009-10-29 14:50:09

标签: oop uml

聚合,组合和依赖之间有什么区别?

7 个答案:

答案 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)

一个对象可能包含另一个对象作为其属性的一部分。

  1. 文档包含含有单词的句子。
  2. 计算机系统有硬盘,RAM,处理器等。
  3. 所以遏制不一定是物理的。例如,计算机系统有保修。

答案 6 :(得分:0)

遏制: - 这里访问内部对象我们必须使用外部对象。我们可以重用包含的对象。 聚合: - 这里我们可以一次又一次地访问内部对象而不使用外部对象。