UML关联的理解问题(UML association understanding problem)

2019-07-30 08:23发布

我一直在使用UML了一会儿,我读过几篇文章,书籍,论坛上关于它,但我还是不太懂,当两个类都应该有关联线(简单的线条或箭头连接(或者是这些不相同?))。 我将提供三个例子 - 你能告诉我哪一个会导致两个类是在这种关系?

1。

//a field of OtherClass
    public class MainClass
    {
        private OtherClass other;
    }

2。

//method argument
    public class MainClass
    {
        public void Action(OtherClass other)
        { }
    }

3。

//method return value
    public class MainClass
    {
        public OtherClass Action()
        { }
    }

4。

//used inside a method
    public class MainClass
    {
        private Something something;

        public void Action()
        {
            OtherClass other = something.GetOtherClass();
        }
    }

Answer 1:

首先箭头代表该协会的适航性 。 单箭头指的单向关系,在这种情况下,只有源类知道目标类。 箭头两端意味着双向关系,其中两个班彼此了解。 如果没有箭头存在的关联可以是通过默认双向或抑制为可读性起见。 在实践中,只有当你想强调该协会的方向,你应该画箭头。

当涉及到你的第二个问题,只有第一种情况描述之间的(单向)协会MainClassOtherClass 。 无论是参数还是返回值意味着在UML意义上的关联(虽然两者暗示的依赖)。 在最后一个例子存在之间的关联MainClassSomething通过类something属性。 作为一个经验法则,你应该寻找的属性关联。

请注意,有一个概念dependency于UML,它是由虚线表示。

您好!



Answer 2:

编辑:重写了以下的答案在评论中讨论(感谢黑猩猩您指出我的例4中忽略)

实施例1:OtherClass是MainClass的一个属性,并因此被建模为一个关联。

实施例2和3:OtherClass是类定义中引用的,虽然不是一个属性内存储的,因此,是一种依赖关系。

实施例4:类的东西是一个属性,因此关联,而引用OtherClass,它不被存储在一个属性,所以它是依赖。

在UML,依赖性和关联是两种类型的关系,并没有严格相关的(除非通过一个共同的超类型),但在我看来,一个协会暗示的依赖。

关联是由在每一端的多重的2类之间的线表示。 适航性由箭头示出哪个类是知道哪些指示(例如A类___> B类装置A知道B的,但不是周围的其他方法)在两个方向上可导航是通过在两端箭头表示。 在没有箭通常更安全做出任何假设有关适航除非另有说明。

依赖关系是通过与来自依赖类(客户端)的箭头的虚线向被依赖于类指示(供应商)(例如,----> B意指A是依赖于B)。 相关性表明,一类是在某些时候引用,这样客户端依赖于由供应商提供的操作,但它并不表示它是如何引用(不像表明存储在属性的引用关联)。



Answer 3:

一个协会代表两个或多个相关属性。

在实施例1,具有MainClass类型OtherClass的属性。 如果OtherClass有型MainClass的明确属性,则会有类之间的双向关联; 如果OtherClass具有类型MainClass的隐特性(即不存在属性,但关系可以通过在另一个方向工作来导出),那么将有来自MainClass单向关联OtherClass。

在实施例2,3和4,MainClass不具有类型OtherClass的任何属性。 它是依赖于OtherClass了,所以会有从MainClass到OtherClass依赖关系。 在码,这是通过使用一个或#包括表示。



Answer 4:

我通常在UML使用两种不同的连接器:

  1. 当一个类是依赖于他人的实施。 这将意味着一个类被创建或处理的另一个实例。 因此,调用类是依赖于实现类。 这将是在所有的例子可见一斑。

  2. 当一个类继承或实现另一个。



文章来源: UML association understanding problem
标签: uml