【发布时间】:2018-08-22 10:59:39
【问题描述】:
早安,
什么是聚合,什么是组合?它们是一样的吗?
据我了解,是没有区别的。
根据:[This Website],它们确实存在细微差别。但是我确实认为他们没有走在正确的轨道上......让我解释一下。
在他们的定义中,他们是这样说的:(我引用)
聚合
暗示一种关系,其中孩子可以独立于 父母。
作曲
暗示一种关系,其中孩子不能独立于 父母。
通过说“子”和“父”意味着存在“基类”和“派生类”。这意味着这两个类之间实际上存在“is-a”关系。根据我对关系的理解,不能存在“具有”关系,因为已经存在“是”关系。
见下面的代码:
public class Animal
{
...
}
public class Reptile : Animal
{
...
}
public class Mammal : Animal
{
...
}
public class Address
{
...
}
public class Zoo
{
private Address address;
private Mammal mammal;
private Reptile reptile;
private string name;
...
}
根据网站给我的定义,'Zoo' 是 Address、Mammal 和 Reptile 的派生类,我强烈反对,因为 'Zoo' 类不继承任何东西。
我对 Composition 和 Aggregation 的理解是当一个类与另一个类具有 'has-a' 关系时,就像动物园一样类有多个类。
如果有区别,请帮助我正确理解。
问候 荣文
【问题讨论】:
-
您可以在以下链接softwareengineering.stackexchange.com/questions/61376/…找到关于这个问题的非常好的答案。
-
我不认为“孩子”和“父母”在这里应该暗示继承。它更像是一种“拥有”或“包含”的关系。网站上的一句话:“例如:房子(父母)和房间(孩子)。房间不是独立于房子而存在的。”可以说,这些名称可能选择不当。
标签: c# oop vocabulary