【问题标题】:Is Aggregation the same as Composition?聚合与组合相同吗?
【发布时间】: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' 类不继承任何东西。

我对 CompositionAggregation 的理解是当一个类与另一个类具有 'has-a' 关系时,就像动物园一样类有多个类。

如果有区别,请帮助我正确理解。

问候 荣文

【问题讨论】:

标签: c# oop vocabulary


【解决方案1】:

你是对的。聚合是使用与其他不相关的类不同的独立组件创建对象或类,而组合使用派生的父子类来专门化行为。

例如,您的 Zoo 类不是从 Animal 派生的,而是使用它的实例。如果您从 Animal 派生 Primate 或 Dog 并创建 MonkeyZoo 或 DogZoo,那么您将在新派生的 Zoo 中依赖于 Animal。

现代 OO 理论倾向于聚合而不是组合,因为太多的虚拟衍生物可能会过度专业化并证明是混乱的 - 最好组合一类简单的可重用对象并派生它们以满足专业需求。

https://javarevisited.blogspot.com/2014/02/ifference-between-association-vs-composition-vs-aggregation.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2011-12-26
    • 2018-04-23
    • 2010-10-18
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多