聚合、组合和依赖之间的区别是什么?


当前回答

聚合-可分离的部分到整体。这个部分有它自己的身份,独立于它的一部分。你可以选择这个部分并将其移动到另一个对象。(真实世界的例子:车轮->汽车,血细胞->身体)

组合——整体中不可分离的部分。不能将该部件移动到另一个对象。更像是一种财产。(真实世界的例子:曲线->道路,人格->人,max_speed ->车,对象的属性->对象)

请注意,在一种设计中是聚合的关系可以是另一种设计中的组合。这一切都是关于如何在特定的设计中使用关系。

依赖-对变化敏感。(雨量->天气,头部位置->身体位置)

注意:“血细胞”->血液”可以是“成分”,因为血细胞不能没有称为血液的实体存在。“血液”->身体“可以是“聚集”,因为血液可以存在而没有实体称为身体。

其他回答

聚合和复合几乎完全相同,除了在子进程完全由父进程控制时使用复合。

聚合

Car -> Tires

轮胎可以从Car对象上取下并安装到另一个对象上。此外,如果汽车报废了,轮胎也不一定要销毁。

作文

Body -> Blood Cell

当Body对象被摧毁时,血细胞也随之被摧毁。

依赖

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

聚合意味着一种关系,其中子节点可以独立于父节点存在。示例:类(父)和学生(子)。删除“类”,“学生”仍然存在。

复合指的是一种关系,其中子进程不能独立于父进程而存在。示例:House(父)和Room(子)。房间并不是独立于House而存在的。

以上两种是包含的形式(因此是亲子关系)。

依赖关系是一种较弱的关系形式,在代码术语中表示类使用另一种by形参或返回类型。

依赖是联系的一种形式。

聚合-可分离的部分到整体。这个部分有它自己的身份,独立于它的一部分。你可以选择这个部分并将其移动到另一个对象。(真实世界的例子:车轮->汽车,血细胞->身体)

组合——整体中不可分离的部分。不能将该部件移动到另一个对象。更像是一种财产。(真实世界的例子:曲线->道路,人格->人,max_speed ->车,对象的属性->对象)

请注意,在一种设计中是聚合的关系可以是另一种设计中的组合。这一切都是关于如何在特定的设计中使用关系。

依赖-对变化敏感。(雨量->天气,头部位置->身体位置)

注意:“血细胞”->血液”可以是“成分”,因为血细胞不能没有称为血液的实体存在。“血液”->身体“可以是“聚集”,因为血液可以存在而没有实体称为身体。

与组合关系关联的对象将不存在于包含对象之外。例如约会和所有者(一个人)或日历;一个TestResult和一个Patient。

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

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

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

文件包含包含单词的句子。 计算机系统有硬盘、内存、处理器等。

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