聚合、组合和依赖之间的区别是什么?
聚合和作文几乎完全相同,除了作文在子对象的生命完全由父对象控制时使用。
聚合
Car -> Tires
Tires可以从Car对象中取出并安装到另一个对象上。此外,如果汽车报废了,轮胎也不一定要销毁。
Tires
Car
作文
Body -> Blood Cell
当Body对象被销毁时,BloodCells也随之被销毁。
Body
BloodCells
依赖
两个对象之间的关系,改变其中一个可能影响另一个。
聚合表示子对象可以独立于父对象存在的关系。示例:类(父)和学生(子)。删除“类”,“学生”仍然存在。
作文表示子对象不能独立于父对象而存在的关系。示例:House(父)和Room(子)。房间并不是独立于House而存在的。
上面两个是容器的形式(因此是父子关系)。
依赖是一种较弱的关系形式,在代码术语中表示类使用另一种by形参或返回类型。
依赖是协会的一种形式。
与作文关系关联的对象将不存在于包含对象之外。例子是一个约会和所有者(一个人)或一个日历;一个TestResult和一个Patient。
另一方面,由包含对象可以构成的聚合对象存在于包含对象之外。例子是一个门和一个房子;员工和部门。
依赖与协作或代表团有关,其中一个对象向另一个对象请求服务,因此依赖于该对象。作为服务的客户端,您希望服务接口保持不变,即使将来提供了服务。
聚合和组合是面向对象世界中的大多数人通过UML获得的术语。UML在定义这些术语方面做得很差,例如,Henderson-Sellers和Barbier(“什么东西叫做聚合?”,“统一建模语言中整体-部分关系的形式化”)已经证明了这一点。我不认为聚合和组合的一致定义可以给如果,你感兴趣的是uml兼容。我建议你看看被引用的作品。
关于依赖关系,这是类型(不是对象)之间高度抽象的关系,几乎可以表示任何东西。
遏制:-这里访问内部对象,我们必须使用外部对象。我们可以重用所包含的对象。 聚合:—在这里我们可以一次又一次地访问内部对象而不使用外部对象
一个对象可以包含另一个对象作为其属性的一部分。
所以遏制不需要是物理上的。例如,计算机系统有保修期。
聚合 -可分离部分到整体。这个部分有它自己的身份,独立于它的一部分。你可以选择这个部分并将其移动到另一个对象。(真实世界的例子:车轮->汽车,血细胞->身体)
作文 -整体不可分离的部分。不能将该部件移动到另一个对象。更像是一种财产。(真实世界的例子:曲线->道路,人格->人,max_speed ->车,对象的属性->对象)
请注意,在一种设计中是聚合的关系可以是另一种设计中的组合。这一切都是关于如何在特定的设计中使用关系。
依赖 -对变化敏感。(雨量->天气,头部位置->身体位置)
注意:“血细胞”->血液”可以是“成分”,因为血细胞不能没有称为血液的实体存在。“血液”->身体“可以是“聚集”,因为血液可以存在而没有实体称为身体。