在UML类图中,关联箭头的方向是什么意思?

19

在这个展示如何绘制类图的网页中,为什么关联的箭头是从订单指向客户,而不是从客户指向订单?

UML教程-类图

7个回答

20
箭头表示可导航性。
  • 关联的可导航端由箭头头上的开放箭头标示
  • 不可导航端由在关联末尾的小x标示
  • 关联结尾没有装饰表示未指定可导航性

UML箭头关联方向

摘自: http://www.uml-diagrams.org/association.html


3
但是什么是“可导航性”? - Guillaume F.
在答案的链接中找到了对导航性的定义:https://www.uml-diagrams.org/association.html#navigability - undefined

19

这是因为一个订单“拥有”对客户的引用。

在数据库中,这将是订单表中的外键,用于存储客户ID。

在代码中,您将在订单对象中存储与客户对象相关联的引用。因此,订单指向客户,而不是相反。


3
为什么我们不应该决定customer有许多order,并将订单的集合引用添加到客户中? - Iman Mahmoudinasab
8
这应该是正确的答案,其他人从未解释过什么是可航行性。 - Geomorillo

10

这可能会有帮助:

UML类图:指南http://msdn.microsoft.com/en-us/library/dd409416%28VS.100%29.aspx

关联属性

是否可导航:如果仅对一个角色为真,则箭头出现在可导航方向中。可以沿这个方向读取关联。您可以使用此功能来指示链接和软件中的数据库关系的可导航性。

UML类图中的关联属性http://msdn.microsoft.com/en-us/library/dd323862%28VS.100%29.aspx

alt text

如果一个角色是可导航的而另一个不是,箭头将出现在可导航方向上的关联上(7)。

6
箭头描述了您可以导航的方式。因此,在此图中,您可以从订单转到客户。对于另一种方式:没有箭头意味着不是“不可导航”,而是“无评论”。没有明确的正确方法来做到这一点。

0

在UML中,关联端点具有布尔可导航属性。在这种情况下,指向顾客的导航设置为true,而指向订单的导航设置为false。

这样,模型的设计者表达了订单现在与哪个顾客相关联,但顾客无法直接访问他们的订单。

如果我们查看此模型的Java代码,可导航性更容易理解。例如,这种可导航性意味着Order具有类型为Customer的属性,而Customer没有集合属性来存储他/她的订单。


关联并不总是对应于UML属性,而且绝对不对应于Java类上的属性(在Java中没有这样的东西,因此在Java上下文中使用“属性”可能意味着字段、属性或Bean属性)。 - Pete Kirkham

-1
可能是因为订单与客户有关?这种情况可以看作是两种方式都可以运作,或者有时候两种方式都可以。

1
我知道它们彼此相关。问题不在于为什么有一个箭头,而是关于箭头的方向。 - neuromancer
它们彼此之间没有关联 - 订单与客户有关联。 - anon
所以根据逻辑它们是相互关联的,你错了,匿名者。 - Geomorillo

-2

这是一种依赖关系,它是一种特殊的弱关联类型。这意味着为了使订单存在,必须在某个时间点上存在客户。在“订单”生命周期的某些阶段,可能不会强制执行此要求。


这不是依赖关系。依赖关系不是一种特殊类型的关联,它是一种特殊类型的关系(就像关联是另一种类型的关系一样)。 - Jordi Cabot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接