聚合,组合和依赖之间有什么区别?
聚合,组合和依赖之间有什么区别?
聚合意味着孩子可以独立于父母而存在的关系。 示例:类(父)和学生(子)。 删除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(而不是对象)之间高度抽象的关系,几乎可以表示任何东西。
遏制: – 在这里访问内部对象,我们必须使用外部对象。 我们可以重用包含的对象。 聚集: – 在这里,我们可以一次又一次访问内部对象,而不使用外部对象。
一个对象可能包含另一个作为其属性的一部分。
- 文件包含含有单词的句子。
- 计算机系统有硬盘,RAM,处理器等。
所以遏制不必是物理的。 例如,计算机系统有保修。