UML关联理解问题

时间:2009-07-17 09:51:07

标签: uml

我一直在使用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();
        }
    }

4 个答案:

答案 0 :(得分:6)

首先,箭头表示关联的导航性。单箭头表示单向关系,在这种情况下,只有源类知道目标类。两端的箭头表示双向关系,其中两个类彼此了解。如果没有箭头,则关联可以是默认的双向关联,也可以是为了便于阅读而被抑制。在实践中,只有在想要强调关联的方向时才应绘制箭头。

说到第二个问题,只有第一个案例描述MainClassOtherClass之间的(单向)关联。参数和返回值都不意味着UML意义上的关联(尽管两者都暗示依赖)。在最后一个示例中,通过MainClass属性在Somethingsomething类之间存在关联。根据经验,您应该在属性中查找关联。

请注意,UML中有一个dependency的概念,它用虚线表示。

Pozdrowienia!

答案 1 :(得分:4)

编辑:在评论中讨论后重写了答案(感谢Chimp指出我在示例4中忽略的内容)

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

示例2和3:在类定义中引用了OtherClass,尽管没有存储在属性中,因此是依赖项。

示例4:Something类是一个属性,因此是一个关联,而引用的OtherClass则没有存储在属性中,因此它是依赖关系。

在UML中,依赖关系和关联都是关系的类型,并没有严格的关联(除了通过一个常见的超类型),虽然在我看来,关联意味着依赖。

关联由两个类之间的线表示,每个类具有多重性。导航性用箭头表示哪个类知道哪个(例如,A类___> B类意味着A知道B,而不是相反)两个方向的导航性由两端的箭头表示。在没有箭头的情况下,除非另有说明,否则通常不会对航行性做出任何假设。

依赖关系用虚线表示,箭头从依赖类(客户端)到依赖的类(供应商)(例如,A ----> B表示A依赖于B)。依赖关系表明某个类在某些时候被引用,因此客户端依赖于供应商提供的操作,但它并不表示它是如何被引用的(与建议存储在属性中的引用的关联不同)。 / p>

答案 2 :(得分:1)

关联表示两个或多个相关属性。

在示例1中,MainClass具有OtherClass类型的属性。如果OtherClass具有MainClass类型的显式属性,那么类之间将存在双向关联;如果OtherClass具有MainClass类型的隐式属性(即没有属性,但可以通过在另一个方向上工作来导出关系),那么将存在从MainClass到OtherClass的单​​向关联。

在示例2,3和4中,MainClass没有任何OtherClass类型的属性。它依赖于OtherClass,因此从MainClass到OtherClass会有依赖关系。在代码中,这由使用 #include 表示。

答案 3 :(得分:0)

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

  1. 当一个类依赖于另一个类的实现时。这意味着一个类正在创建或处理另一个的实例。所以调用类依赖于实现类。这在你的所有例子中都很明显。

  2. 当一个类扩展或实现另一个时。