我一直在使用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();
}
}
答案 0 :(得分:6)
首先,箭头表示关联的导航性。单箭头表示单向关系,在这种情况下,只有源类知道目标类。两端的箭头表示双向关系,其中两个类彼此了解。如果没有箭头,则关联可以是默认的双向关联,也可以是为了便于阅读而被抑制。在实践中,只有在想要强调关联的方向时才应绘制箭头。
说到第二个问题,只有第一个案例描述MainClass
和OtherClass
之间的(单向)关联。参数和返回值都不意味着UML意义上的关联(尽管两者都暗示依赖)。在最后一个示例中,通过MainClass
属性在Something
和something
类之间存在关联。根据经验,您应该在属性中查找关联。
请注意,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中使用两个不同的连接器:
当一个类依赖于另一个类的实现时。这意味着一个类正在创建或处理另一个的实例。所以调用类依赖于实现类。这在你的所有例子中都很明显。
当一个类扩展或实现另一个时。