Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 这个族类图是聚合还是组合的示例?_Design Patterns_Aggregation_Composition_Class Diagram - Fatal编程技术网

Design patterns 这个族类图是聚合还是组合的示例?

Design patterns 这个族类图是聚合还是组合的示例?,design-patterns,aggregation,composition,class-diagram,Design Patterns,Aggregation,Composition,Class Diagram,我正在寻找关于下面类图的一些澄清:“它是聚合还是合成?解释原因。” 我对这个答案犹豫不决。从我最初的理解来看,这个学生“有一个”家庭、母亲和父亲;因此,这是一个作文的例子,因为如果学生(儿子、女儿)不存在,母亲或父亲的概念就不存在了。然而,如果我从另一个角度来看,如果学生(孩子)[不再存在]/[根本不存在],仍然有可能存在两个单独的对象(这里称为父亲和母亲),并且仍然包含相同的属性;这就是聚合的一个例子 希望我试图表达我的想法是有道理的。谁能帮我澄清一下吗 谢谢您的时间。假设您正确使用了UML

我正在寻找关于下面类图的一些澄清:“它是聚合还是合成?解释原因。”

我对这个答案犹豫不决。从我最初的理解来看,这个学生“有一个”家庭、母亲和父亲;因此,这是一个作文的例子,因为如果学生(儿子、女儿)不存在,母亲或父亲的概念就不存在了。然而,如果我从另一个角度来看,如果学生(孩子)[不再存在]/[根本不存在],仍然有可能存在两个单独的对象(这里称为父亲和母亲),并且仍然包含相同的属性;这就是聚合的一个例子

希望我试图表达我的想法是有道理的。谁能帮我澄清一下吗


谢谢您的时间。

假设您正确使用了UML图,答案就在图片上——它是基于箭头类型的聚合。但是让我们看看。这篇文章的解释和我写的一样,只是用了不同的词

让我们一步一步地听你的陈述

这个学生有一个家庭,母亲和父亲

不完全正确:母亲有家庭,父亲有家庭。而且这个家庭“有”个学生。
让我们看一个例子:

上面的图表显示了两类汽车的组成:一辆汽车正好有一个化油器,而化油器是一辆汽车的一部分。化油器不能作为单独的零件存在,与特定的汽车分离。底部的图表显示了两个类之间的聚合:一个池塘有零个或多个鸭子,一个鸭子最多有一个池塘(一次)。鸭子可以与池塘分开生存,例如,它可以生活在湖边

根据本说明,箭头所附着的对象是所有者。但是让我们转到下一个你的声明

因为没有学生,母亲或父亲的概念就不存在了

这并不完全正确,因为您的图没有描述任何“概念”,UML图显示了对象属性以及它们之间的关系。因此,如果有任何“概念”,则应在图表之外说明。
让我们假设您的图表显示了现实世界中的关系:家庭是否可以不作为母亲或父亲的一部分而存在?不。那么,母亲、父亲和家庭之间的关系就是组成部分,因为家庭本身并没有被使用,也不存在

如果学生(孩子)[不再存在]/[根本不存在],仍然有可能存在两个单独的对象(这里称为父亲和母亲),并且仍然包含相同的属性

对。但根据图表,他们一开始没有任何关系。因此,没有必要质疑或证明他们之间的感情。但你应该关注家庭和学生之间的关系。
如果学生不是一个家庭的一部分,他能成为一个有效的对象并且自己行动吗?根据现实世界——是的,这是可能的。那么,这就是作文

重要提示:我暗示了这些对象之间的关系,以现实世界中的规则为例,如果家庭不是某个父亲和母亲的一部分,它就不存在。

但是在编程中,我们使用模型和关系,我们知道这些模型并不反映现实世界的1对1,因此如果某些程序中没有父对象和母对象,可以使用
对象
族吗?当然可以-取决于对象的用途。例如,它可以用来存储统计数据,而与具体的父亲和母亲没有任何联系。这将使这种关系成为一种聚合。为避免此类问题,应明确描述对象之间的关系及其独立生活的可能性,因此可以假设正确的关系类型。

您使用的组合和聚合的定义是什么?对我来说,这个问题是非常基于观点的,答案可能会受到这些事物定义的严重影响。我一直在使用这个定义:聚合意味着一种关系,其中子对象可以独立于父对象而存在。组合意味着子对象不能独立于父对象而存在的关系。我走对了吗?对我来说也是主观的。非常感谢@cassandrad的帮助!你所写的确实为我理清了分析这些关系的过程。正如您所提到的,没有上下文或明确说明的概念这一事实确实让我感到困惑,因为我不知道我是否应该做出假设。并不是说我想重新讨论这个问题,而是要迅速地;即使有现实世界的假设,家庭也不能不作为父母的一部分而存在,仅仅包含学生对象吗?或者我在那里遗漏了什么。非常感谢您抽出时间!