理解聚合,关联,组合

时间:2016-06-20 06:03:03

标签: c# uml

我的代码中有以下场景,想要了解类之间的聚合,组合,关联关系。

1)

class A : IDisposable
{
    private B objB;

    public A(B )
    {
        objB = new B();
    }

    public void Dispose()
    {
        objB.Dispose();
    }
}

2)

class A : IDisposable
    {
        private B objB;

        public A(B objB)
        {
            this.objB = objB;
        }

        public void Dispose()
        {

        }
    }

3)

class A : IDisposable
    {
        private B objB;

        public A()
        {

        }

        public void Sample()
        {
            objB = new B();
        }

        public void Dispose()
        {
            if (objB != null)
            {
                objB.Dispose();
            }
        }
    }

4)

class A : IDisposable
    {

        public A()
        {

        }

        public void Sample()
        {
            using (B objB = new B())
            {
                //Do some operation
            }

        }

        public void Dispose()
        {

        }
    }

1 个答案:

答案 0 :(得分:1)

简明扼要

关联 - 有两个对象彼此了解,但它们不会影响彼此的生命周期。

成分 - 有两个类: A B 。类的对象 A 包含 B类对象,如果没有 B 类,则无法逻辑

聚合 - 是“有一个”关联关系的变体;聚合比关联更具体。它是一种代表部分整体或部分关系的协会。

在您的示例中,1和3是成分,因为它们包含 B类对象。示例4是关联,因为它< strong>仅知道关于 B类将其对象用作局部变量。示例2是聚合

enter image description here

您可以在wiki中阅读更多内容 https://en.wikipedia.org/wiki/Class_diagram

编辑:

撰写汇总之间的区别。

作文关系:在尝试表示真实世界的整体关系时,例如发动机是汽车的一部分 聚合关系:表示软件或数据库关系时,例如汽车模型发动机ENG01是汽车模型CM01的一部分,因为发动机ENG01也可能是不同汽车模型的一部分。

在您的示例1中,您在类A中创建了B类的对象。基于您的代码,您无法将类B的创建对象提供给A类的另一个对象。 但是在你的例子2中,你给对象B作为参数。所以你可以创建许多A类对象并给它们相同的对象B