七张图讲明白,使用UML活动图的建模过程

开发 前端
一直以来,存在着众多的流程建模和数据流图示语言,而UML活动图日渐流行,成为事实上的标准,但是它还有其他重要变体。

1.什么是UML

统一建模语言(UML)是描述、构造和文档化系统制品的可视化语言。在上面的UML定义中,关键点是可视化这个词,UML是图形化表示法的事实标准,用来绘制和展示与软件(特别是OO软件)相关的图形(以及文字)。

UML定义了各种UML简档(UML profile),这些简档专用于某些常用主题领域的表示法中,例如对EJB使用UML EJB简档。

在更深的层次上,UML表示法的基础是UML元模型(meta-model),它描述建模元素的语义,UML元模型主要对模型驱动架构(Model Driven Architecture,MDA)CASE工具供应商有影响。开发者并不需要学习它。

2.示例

图1中演示了基本的UML活动图表示法,这种活动图包括动作(action)、分区(partition)、分叉(fork)、汇合(join)和对象节点(object node)等。从本质上讲,此图显示了一系列动作,其中某些动作可以是并行的。这些表示法大部分都是不言自明的,但有两点细微之处需要说明:

  • 一旦某个动作完成,紧接着会有一个自动的向外迁移。
  • 活动图能够既表示控制流又表示数据流。

▲图1 基本的UML活动图表示法▲图1 基本的UML活动图表示法

3.如何应用活动图

UML活动图提供了丰富的表示法来表示一系列活动,其中包括并行的活动。活动图可用于任何视角或目的,但常用于可视化业务工作流及过程和用例。

业务流程建模

我的一个客户经营包裹快递业务。快递包裹的过程相当不简单;其中涉及众多参与方(顾客、司机等)和大量步骤。尽管可以用文本(例如用例文本)描述这一过程,但活动图恰是“图画胜于千言”这一说法的最好例证。我的客户通过活动图可视化的手段来理解其复杂的业务流程。分区有助于观察多个参与方以及运输流程中涉及的并行动作,对象节点可以描述正在移动的东西。对当前的业务流程建模之后,他们可视化地探索变更和优化。图1是一个应用UML活动图进行业务流程建模的简单例子。如果将客户的整个包裹快递业务流程模型显示出来会占满整面墙!

数据流建模

从20世纪70年代开始,数据流图(DFD)就已经成为流行的方法,用于对软件系统过程中所涉及的主要步骤和数据进行可视化。这不同于业务流程建模,尽管理论上讲DFD可以用于业务流程建模,但其通常用于表示计算机系统中的数据流。DFD可以用来记录主要数据流或以数据流的方式探索新的高级设计。图2是使用经典Gane-Sarson表示法的DFD示例。注意其中对过程步骤进行了编号,以表示顺序。

▲图2 使用Gane-Sarson表示法的经典DFD▲图2 使用Gane-Sarson表示法的经典DFD

对于文档化和探索来说,DFD模型所提供的信息都具有效用,但UML中并没有包含DFD表示法。幸运的是,UML活动图能够实现同一目的—用于数据流建模,从而代替传统的DFD表示法。图3展示了与图2中的DFD相同的信息,但是它使用了UML活动图。注意,除对象节点(object node)以外,UML数据存储节点(datastore node)也适用于数据流表示。

▲图3 使用UML活动图表示法来表示数据流模型▲图3 使用UML活动图表示法来表示数据流模型

并发编程和并行算法建模

并发编程问题中的并行算法涉及多个分区、分叉和汇合行为。例如,这些算法可用于3D模拟中有限元和有限差分模型、原油储备模型、材料应力分析和天气建模。整个物理空间被分成大块,每一块由一个并行的线程(或进程)执行。在这些例子中,使用UML活动图分区(partition)来表示不同的操作系统线程或进程。使用对象节点(object node)对共享对象和数据进行建模。同时,分叉(fork)用于对多个线程(或进程)的创建和并行执行进行建模,每分区一个线程(或进程)。

4.其他UML活动图表示法

当某个活动需要在另外一个活动图中展开时,如何表示?如图4和图5所示,可以使用耙子(rake)符号来表示。

▲图4 在另外一个活动图中展开一个活动▲图4 在另外一个活动图中展开一个活动

▲图5 活动的扩展▲图5 活动的扩展

如何表示条件分支?参见图5中所使用的决策(decision)符号。与之相关的是合并(merge)符号,用来表示分支流如何回归到一起。

图6中展示了信号。当你需要对时间触发动作或取消请求等诸如此类的事件建模时,信号非常有用。

此外,还有更多有效的UML活动图表示法。这里只重点介绍一些最常用的元素。

▲图6 信号▲图6 信号


5.准则

在活动图建模方面,有下面一些准则:

  • 活动图通常对于涉及众多参与方的非常复杂的过程建模最有价值。对于简单的过程,用例文本就够用了。
  • 在进行业务流程建模时,可以利用耙子(rake)符号和子活动图。在level 0图的概览中,保持较高的抽象水平,从而使图形具有清晰、简洁的品质。在level 1甚至level 2的子图中展开细节。
  • 与上一条相关的是,尽量保持同一张图中所有动作节点的抽象级别一致。举一个反例,假设在level 0的图中有一个叫“交付订单”的动作节点,还有一个叫“计算税款”的动作节点。这些动作的抽象级别非常不同。

6.示例:NextGen中的活动图

图7中的局部模型表示对处理销售用例中的过程应用UML活动图的例子。展示这一案例研究的示例是为了保证完整性。但是实际上不会费心去创建这个,有了用例文本,而且过程相对简单,这样做就没什么边际价值了。

▲图7 使用UML活动图对处理销售用例建模▲图7 使用UML活动图对处理销售用例建模


7.过程:统一过程中的活动图

统一过程的科目之一是业务建模(Business Modeling),其用途是理解和沟通“将要部署系统的组织的结构和动态特征”[RUP]。业务建模科目的关键制品是业务对象模型(UP中领域模型的超集)。本质上,业务对象模型使用UML类图、序列图和活动图对业务运转方式进行了可视化。因此,在UP的业务建模科目中,活动图尤为适用。

8.背景

一直以来,存在着众多的流程建模和数据流图示语言,而UML活动图日渐流行,成为事实上的标准,但是它还有其他重要变体。

活动图的语义松散地基于Petri网,Petri网是计算机科学中一个重要的计算理论。Petri网的隐喻实现是:令牌流过活动图。例如,当令牌到达一个动作节点时,动作将执行。当所有必要的输入令牌到达汇合节点,输出令牌将被创建。

关于作者:

克雷·拉曼(Craig Larman)享誉世界的软件开发专家,从事软件开发相关工作超过50年,为面向对象编程思想和敏捷开发方法在全球IT领域的普及做出了巨大的贡献,被誉为“有史以来最具影响力的 20 位敏捷人物之一”,是LeSS(大规模Scrum)的共同创始人。

责任编辑:武晓燕 来源: 数仓宝贝库
相关推荐

2010-06-29 18:16:57

UML建模

2010-06-30 14:37:20

UML类图

2010-06-17 15:29:52

UML活动图

2010-07-09 16:13:06

UML活动图

2010-06-13 15:03:25

UML实践

2010-07-12 09:37:26

UML建模

2010-06-09 08:59:30

UML活动图

2010-07-06 12:00:23

UML活动图

2010-06-30 17:36:58

UML用例图

2010-07-01 17:05:34

UML包图

2010-07-09 09:00:22

UML建模

2010-06-09 14:31:31

UML状态图

2010-07-06 11:21:37

UML状态图

2010-07-05 13:55:40

UML图分类

2022-09-19 09:41:45

数据库思维

2010-06-08 10:51:48

UML活动图

2010-07-01 16:38:28

UML序列图

2010-06-10 14:45:24

UML建模语言

2010-06-08 09:30:20

UML图

2010-07-09 11:23:07

UML动态建模
点赞
收藏

51CTO技术栈公众号