UML箭头的解释

330

我最近一直在学习UML,并且用普通的箭头在类之间绘制简单的图表,但我知道这还不够。还有很多其他类型的箭头:泛化、实现等等,这些对于图表读者来说都有特定的含义。

我能否得到每种箭头(普通箭头、实线箭头、虚线箭头、菱形填充箭头、菱形箭头)的解释呢?

最好能够附带一些代码示例。


这是一份简化的教程:实用UML - Siblja
5
我强烈推荐考虑阅读以下内容:https://dzone.com/refcardz/getting-started-uml。 - trinity
9个回答

547

以下是来自Visual Studio 2015文档的一些解释:

UML类图:参考https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/modeling/uml-class-diagrams-reference

UML类图

5: 关联: 两个分类器成员之间的关系。

5a: 聚合: 表示共享拥有关系的关联。所有者角色的聚合属性设置为共享

5b: 组合: 表示整体部分关系的关联。所有者角色的聚合属性设置为组合

9: 泛化: 特定分类器继承其定义的一部分来自一般分类器。一般分类器位于连接器的箭头端。特定分类器继承属性、关联和操作。使用继承工具在两个分类器之间创建泛化。

包图

13: 导入: 包与包之间的关系,表示一个包包含另一个包的所有定义。

14: 依赖: 如果箭头末端的分类器发生变化,则其所依赖的分类器的定义或实现可能会改变。

实现关系

15: 实现: 类实现了接口定义的操作和属性。使用继承工具在类和接口之间创建一个实现关系。

16: 实现: 相同关系的另一种呈现方式。棒棒糖符号上的标签标识了接口。

UML 类图:指南: http://msdn.microsoft.com/library/dd409416%28VS.140%29.aspx

关联属性

聚合: 在连接器的一端出现为菱形形状。您可以使用它来表示聚合角色拥有或包含其他实例。

可导航性: 如果只对一个角色为真,则会在可导航方向上出现箭头。您可以使用此功能来表示软件中的链接和数据库关系的可导航性。


泛化: 泛化意味着特定或派生类型继承了通用或基本类型的属性、操作和关联。一般类型出现在箭头末端。

实现: 实现意味着一个类实现了接口指定的属性和操作。接口位于连接器的箭头端。

如果您有更多问题,请让我知道。


1
很好的参考资料,但对我来说,菜单->菜单项与订单->订单项具有相同的关系,因此它们都是组合。 - Ignacio Soler Garcia
4
两者都表示订单项属于订单且无法移动,而菜单项可以调整 - 用户可以更改菜单项的位置。这是选择的解决方案。为什么不呢? - Gangnus
3
@JMD,订单项也可以移动。组合聚合在UML规范中定义如下:组合聚合是一种强聚合形式,要求一个部分对象最多同时包含在一个组合对象中。如果删除组合对象,则所有作为对象的部分实例也将被删除。在删除组合对象之前,可以从组合对象中删除部分对象(在其他情况下允许),因此不会作为组合对象的一部分被删除。 - www.admiraalit.nl
2
@aGer 谢谢,我已经更新了主题和图片链接。 - Esther Fan - MSFT
1
有趣的是,微软被标记为UML的主要参考。他们是OMG的成员之一,但绝对只是其中之一。除此之外,类的呈现不符合标准(我会优雅地忽略内部的下拉图标)。UML的源代码可以在https://www.omg.org/spec/UML/2.5.1/About-UML/找到。 - qwerty_so
显示剩余2条评论

213

enter image description here

enter image description here

我认为这些图片是可以理解的。


4
这些概念有些不是重叠的吗? A依赖于B,A可以访问B。一个关联总是一种依赖,一个依赖总是一种关联,是不是这样? - Eres
5
在这张图中,“实现”一词被重复出现,但是使用了不同的图片。您能否详细说明它们之间的区别? 答案:在图中,“实现”这个概念被用了两次,但是分别与不同的图片相对应。请问两者有何不同之处? - variable
@variable 这只是表示同一事物的另一种方式。 - abdallah hossam
在UML 2.5中,共享聚合和组合聚合的定义与早期版本相比发生了巨大变化。 - qwerty_so

46

5
过去30分钟我一直在寻找这个。我知道概念,只是忘记符号了。 - aclave1
1
这种表达方式的缺点在于它使用UML异常流连接器来标记单个感兴趣的点。我认为这不是一个好主意。 - qwerty_so
@qwerty_so,你的意思是像这样吗?https://i.imgur.com/Q68VxTz.png 我明白你的意思了... - Nate Anderson
1
确切地说,最好使用一些非 UML 表示法(例如 Mickeysoft 使用的带圆圈的数字)来表示 / 解释单箭头,而不是使用另一个 UML 箭头(我知道它们已经大量使用了)。 - qwerty_so

15

我最喜欢的UML“备忘单”是UML Distilled,作者是Martin Fowler。这是他的书中唯一一个我推荐阅读的。


2
有趣的,我相当喜欢重构。你对它有什么看法吗? - djna
是的,我觉得这些都很显而易见,并且不喜欢过于集中于Java。另外,请不要认为我的回答是在说他的其他书籍都是垃圾。 - anon
福勒的书在书封内部还附有一个备忘单。对于入门非常有用,特别是当你下一个问题是箭头朝哪个方向时。 - Ted Johnson
31
“Cheat sheet”来说,185页有点过多了! - cdyson37

11

为了快速参考以及清晰简洁的示例,Allen Holub的UML Quick Reference是非常出色的:

http://www.holub.com/goodies/uml/

(第一列的表格中有很多箭头和指针的具体示例,并在第二列中进行了描述。)


我喜欢他的第一个例子,并希望他能在基础知识方面逐步展开,但这是一篇不错的文章。 - killjoy

7
被接受的答案说得不错,但是缺少一些解释。例如,单向关联和双向关联有什么区别?在提供的例子中,两者都存在(箭头中的两个“5”)。如果想要更全面的答案并且有更多时间,这里 提供了详细的解释。

7
非常易懂的描述可以在yuml的文档中找到,其中包含了类图、用例和活动示例。请参考yuml文档

1
可能是最适合新手的UML教程,按照这个列表学习;注意:该网站还允许您免费绘制自己的UML图(5)。 - killjoy

4

聚合和组合有点混淆。然而,可以认为组合是聚合的更强版本。这是什么意思呢? 我们来举个例子: (聚合) 1.拿一个教室和学生为例: 在这种情况下,我们试图分析它们之间的关系。一个教室具有学生的关系。这意味着教室由一个或多个学生组成。即使我们删除了教室类,学生类也不需要被破坏,这意味着我们可以独立使用学生类。

(组合) 2.再看看页面和书籍类。 在这种情况下,页面一本书,这意味着页面的集合构成了书。如果我们删除了书籍类,整个页面类将被摧毁。这意味着我们无法单独使用页面类。
如果您对此主题仍不清楚,请观看这段精彩简短的视频,其中更清楚地解释了聚合。

https://www.youtube.com/watch?v=d5ecYmyFZW0


1

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