美好的一天,
什么是聚合,什么是组成?他们是一样的吗?
据我了解,没有区别。
根据[This Website],它们确实在微妙的方面有所不同。但是我确实认为他们走的路不对...让我解释一下。
在他们的定义中,他们说的是以下几点:(我引用)
汇总
暗示一种关系,孩子可以独立于 父母。
组成
暗示一种关系,其中孩子不能独立于 父母。
说“孩子”和“父母”意味着存在“基类”和“派生类”。这意味着实际上这两个类之间存在“是”关系。根据我对关系的理解,因为已经存在“ is-a”关系,所以不能有“ has-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”是地址,哺乳动物和爬行动物的派生类,由于“ Zoo”类不继承任何内容,因此我对此表示强烈反对。
我对组成和聚合的理解是,当一个班级与另一个班级(如Zoo)具有“有” 关系时一个班级有多个班级。
如果有区别,请帮助我正确理解。
问候 罗恩
答案 0 :(得分:1)
您是正确的。聚合是使用与其他不相关类不同的独立组件来创建对象或类,而组合使用派生的父子类来专门化行为。
例如,您的Zoo类并不派生自Animal,而是使用其实例。如果您从Animal衍生出灵长类动物或Dog并制作MonkeyZoo或DogZoo,您将在新衍生的Zoo中依赖Animal。
现代的面向对象理论倾向于倾向于聚合而不是组成,因为太多的虚拟派生工具可能会过度专业化并证明令人困惑-更好地构成一类简单的可重用对象并为专业需求而派生它们。