对于关联,聚合,组合物C#代码(C# code for association, aggregati

2019-06-18 08:09发布

我想确认一下我什么样的代码是这样的关联,聚合和组成的了解。 所以在这里不用..

聚集 :有-A。 它另一种类型的现有对象

public class Aggregation
{
    SomeUtilityClass objSC
    public void doSomething(SomeUtilityClass obj)
    {
      objSC = obj;
    }
}

组成 :由另一个对象

public class Composition
{
    SomeUtilityClass objSC = new SomeUtilityClass();
    public void doSomething()
    {
        objSC.someMethod();
    }
}

协会 :我对这个两个视图。

  1. 当一个类与另一个相关联。 因此上述两种是关联的例子。
  2. 关联是聚合的较弱的形式,其中类不参考保持到它接收到的对象。

     public class Association { //SomeUtilityClass objSC /*NO local reference maintained */ public void doSomething(SomeUtilityClass obj) { obj.DoSomething(); } } 

我的理解是正确的吗? 我看了冲突的文章在这里 ,并在这里 ,所以我真的不知道一个要跟踪的。 我的理解似乎是在与第一链接线。 我觉得第二个链接是错误的,也许也许我还没有正确理解它。

你怎么看?

Answer 1:

聚合和组合之间的差是非常模糊的,该容器被破坏后AFAIK涉及“子”的对象的逻辑存在。 因此,容器对象被销毁之后,而在组合物设计的情况下要求它们也被摧毁在聚合的情况下,可以还存在容器内的对象。 一些类比:

  • Car含有四个对象Wheel对象。 一般来说,如果你破坏了汽车(通过调用某些方法把它清理干净),你也应该破坏车轮的过程中,因为它没有什么意义了他们在车外存在(除非你将其移动到另一个Car的对象)。 更实际地,当它被关闭自身的读取器对象包裹的输入流也将关闭内流。 这是组成
  • 一个Person对象包含(拥有) Radio对象。 如果Person死亡, Radio也可以通过其他继承Person即是有意义的,它未经原创者存在。 更为现实的是,拿着对象列表中不要求列表本身布置时,所有对象得到安置。 这是聚集

编辑 :阅读你的链接后,我会倾向于去的第一个,因为它提供了一种类似于雷的解释。

关联仅仅调用一个方法通过对该对象的引用(发送消息)到另一个对象。



Answer 2:

对于两个对象FooBar ,我们有:

相关性:

class Foo
{
    ...
    fooMethod(Bar bar){}
    ...
}

协会:

class Foo
{
    private Bar bar;
    ...
}

组成:(Foo死亡也是如此Bar

class Foo
{
    ...
    private Bar bar = new Bar();
    ...
}

聚集:(Foo死, Bar可能住上)

class Foo 
{
    private List<Bar> bars;
}


文章来源: C# code for association, aggregation, composition
标签: c# oop