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

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

聚合意味着孩子可以独立于父母而存在的关系。 示例:类(父)和学生(子)。 删除class级和学生仍然存在。

构图意味着孩子不能独立于父母而存在的关系。 例如:房屋(家长)和房间(孩子)。 房间不存在独立的房子。

以上两点是遏制的forms(因此是亲子关系)。

依赖关系是较弱的关系forms,用代码术语表示一个类使用另一个参数或返回types。

依赖是一种联想forms。

聚合组成几乎完全相同,只是当儿童的生活完全由父母控制时使用组合物

聚合

Car -> Tires 

Tires可以从Car对象上取下并安装在另一个上。 而且,如果汽车得到总计,轮胎不一定要被销毁。

组成

 Body -> Blood Cell 

Body对象被破坏的时候, BloodCells会被破坏。

依赖

两个对象之间的关系,改变一个可能会影响另一个。

聚合 – 可分部分到整体。 该部分具有自己的身份,与其所属的部分分开。 您可以select该部分并将其移动到另一个对象。 (现实世界的例子:车轮 – >车,血球 – >身体)

构图 – 整体的非分离部分。 您不能将零件移动到另一个对象。 更像是一个财产。 (现实世界的例子:曲线 – >道路,个性 – >人,max_speed – >汽车,物体的属性 – >物体)

请注意,一个devise中的聚合关系可以是另一个devise中的合成。 它关于如何在特定devise中使用关系。

依赖 – 敏感的变化。 (雨量 – >天气,头位 – >位置)

注意:“血细胞” – “血”可以是“组成”,因为血细胞在没有称为血的实体的情况下是不可能存在的。“血” – “身体”可以是“聚集”,因为血可以存在而不存在称为身体的实体。

构图关系相关联的对象不会存在于包含对象之外。 例子是一个约会和所有者(一个人)或一个日历; 一个TestResult和一个Patient。

另一方面,由包含对象聚合的对象可以存在于包含对象之外。 例子是门和房子; 员工和部门。

依赖关系涉及协作委托 ,其中对象请求来自另一对象的服务并因此依赖于该对象。 作为服务的客户,即使将来提供服务,也希望服务接口保持不变。

聚合和组合是OO世界中大多数人通过UML获得的术语。 而UML在定义这些术语方面做得很差,例如Henderson-Sellers和Barbier(“这是什么叫做聚合?”,“统一build模语言中的整体关系的forms化” “)。 如果您对UML兼容感兴趣,我不认为可以给出聚合和组合的连贯定义。 我build议你看引用的作品。

关于依赖关系,这是types(而不是对象)之间高度抽象的关系,几乎可以表示任何东西。

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

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

  1. 文件包含含有单词的句子。
  2. 计算机系统有硬盘,RAM,处理器等。

所以遏制不必是物理的。 例如,计算机系统有保修。