大家好,这里是 Lucifer三思而后行,公众号赠书福利活动 正式开启。
《UML和模式应用(原书第3版 · 典藏版)》
导读:一个UML活动图表示一个过程中的多个顺序活动和并行活动。这些活动图有助于对业务流程、工作流、数据流和复杂算法进行建模。本文介绍使用UML活动图的建模过程。
统一建模语言(UML)是描述、构造和文档化系统制品的可视化语言。在上面的UML定义中,关键点是可视化这个词,UML是图形化表示法的事实标准,用来绘制和展示与软件(特别是OO软件)相关的图形(以及文字)。
UML定义了各种UML简档(UML profile),这些简档专用于某些常用主题领域的表示法中,例如对EJB使用UML EJB简档。
在更深的层次上,UML表示法的基础是UML元模型(meta-model),它描述建模元素的语义,UML元模型主要对模型驱动架构(Model Driven Architecture,MDA)CASE工具供应商有影响。开发者并不需要学习它。
图1中演示了基本的UML活动图表示法,这种活动图包括动作(action)、分区(partition)、分叉(fork)、汇合(join)和对象节点(object node)等。从本质上讲,此图显示了一系列动作,其中某些动作可以是并行的。这些表示法大部分都是不言自明的,但有两点细微之处需要说明:
一旦某个动作完成,紧接着会有一个自动的向外迁移。
活动图能够既表示控制流又表示数据流。
▲图1 基本的UML活动图表示法
UML活动图提供了丰富的表示法来表示一系列活动,其中包括并行的活动。活动图可用于任何视角或目的,但常用于可视化业务工作流及过程和用例。
业务流程建模
我的一个客户经营包裹快递业务。快递包裹的过程相当不简单;其中涉及众多参与方(顾客、司机等)和大量步骤。尽管可以用文本(例如用例文本)描述这一过程,但活动图恰是“图画胜于千言”这一说法的最好例证。我的客户通过活动图可视化的手段来理解其复杂的业务流程。分区有助于观察多个参与方以及运输流程中涉及的并行动作,对象节点可以描述正在移动的东西。对当前的业务流程建模之后,他们可视化地探索变更和优化。图1是一个应用UML活动图进行业务流程建模的简单例子。如果将客户的整个包裹快递业务流程模型显示出来会占满整面墙!
数据流建模
从20世纪70年代开始,数据流图(DFD)就已经成为流行的方法,用于对软件系统过程中所涉及的主要步骤和数据进行可视化。这不同于业务流程建模,尽管理论上讲DFD可以用于业务流程建模,但其通常用于表示计算机系统中的数据流。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活动图表示法来表示数据流模型
并发编程和并行算法建模
并发编程问题中的并行算法涉及多个分区、分叉和汇合行为。例如,这些算法可用于3D模拟中有限元和有限差分模型、原油储备模型、材料应力分析和天气建模。整个物理空间被分成大块,每一块由一个并行的线程(或进程)执行。在这些例子中,使用UML活动图分区(partition)来表示不同的操作系统线程或进程。使用对象节点(object node)对共享对象和数据进行建模。同时,分叉(fork)用于对多个线程(或进程)的创建和并行执行进行建模,每分区一个线程(或进程)。
当某个活动需要在另外一个活动图中展开时,如何表示?如图4和图5所示,可以使用耙子(rake)符号来表示。
▲图4 在另外一个活动图中展开一个活动
▲图5 活动的扩展
如何表示条件分支?参见图5中所使用的决策(decision)符号。与之相关的是合并(merge)符号,用来表示分支流如何回归到一起。
图6中展示了信号。当你需要对时间触发动作或取消请求等诸如此类的事件建模时,信号非常有用。
此外,还有更多有效的UML活动图表示法。这里只重点介绍一些最常用的元素。
▲图6 信号
在活动图建模方面,有下面一些准则:
活动图通常对于涉及众多参与方的非常复杂的过程建模最有价值。对于简单的过程,用例文本就够用了。
在进行业务流程建模时,可以利用耙子(rake)符号和子活动图。在level 0图的概览中,保持较高的抽象水平,从而使图形具有清晰、简洁的品质。在level 1甚至level 2的子图中展开细节。
与上一条相关的是,尽量保持同一张图中所有动作节点的抽象级别一致。举一个反例,假设在level 0的图中有一个叫“交付订单”的动作节点,还有一个叫“计算税款”的动作节点。这些动作的抽象级别非常不同。
图7中的局部模型表示对处理销售用例中的过程应用UML活动图的例子。展示这一案例研究的示例是为了保证完整性。但是实际上不会费心去创建这个,有了用例文本,而且过程相对简单,这样做就没什么边际价值了。
▲图7 使用UML活动图对处理销售用例建模
统一过程的科目之一是业务建模(Business Modeling),其用途是理解和沟通“将要部署系统的组织的结构和动态特征”[RUP]。业务建模科目的关键制品是业务对象模型(UP中领域模型的超集)。本质上,业务对象模型使用UML类图、序列图和活动图对业务运转方式进行了可视化。因此,在UP的业务建模科目中,活动图尤为适用。
一直以来,存在着众多的流程建模和数据流图示语言,而UML活动图日渐流行,成为事实上的标准,但是它还有其他重要变体。
活动图的语义松散地基于Petri网,Petri网是计算机科学中一个重要的计算理论。Petri网的隐喻实现是:令牌流过活动图。例如,当令牌到达一个动作节点时,动作将执行。当所有必要的输入令牌到达汇合节点,输出令牌将被创建。
克雷·拉曼(Craig Larman)享誉世界的软件开发专家,从事软件开发相关工作超过50年,为面向对象编程思想和敏捷开发方法在全球IT领域的普及做出了巨大的贡献,被誉为“有史以来最具影响力的 20 位敏捷人物之一”,是LeSS(大规模Scrum)的共同创始人。
本文摘编于《UML和模式应用(原书第3版 · 典藏版)》》(书号:9787111744429),经出版方授权发布,转载请标明文章出处。
赠送书籍:《UML和模式应用(原书第3版 · 典藏版)》
🔥🔥🔥 公众号赠书规则:
1、关注下方公众号:Lucifer三思而后行
2、参与方式:转发本文至朋友圈、在看、留言,根据精彩留言点赞数,前 3 位各送 1 本
3、扫码进群,及时获取最新福利活动,广告😡禁入
注意事项:本活动纯属粉丝福利,先到先得。如发现机器或者非真实流量刷赞,发现后将进入黑名单,取消获赠资格。