UML 活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。在很多方面,活动图是结构化开发中流程图和数据流程图 (DFD) 的面向对象等同体,要创建一个 UML 活动图,您需要反复执行下列步骤。
第一步,定义活动图的范围首先应该定义您要对什么建模。单个用户案例力?一个用户案例的一部分?一个包含多个用户案例的商务流程?一个类的单个方法?一旦您定义了您所作图的范围,您应该在其顶部,用一个标注添加标签,指明该图的标题和唯一的标示符。您有可能也想要包括该图的时间甚至作者名。
第二步,添加起始和结束点每个活动图有一个起始点和结束点,因此您也要马上添加它们。在 《UML 精粹》(UML Distilled) (参见参考资料),Fowler 和 Scott 认为结束点是可选的。有时候一个活动只是一个简单的结束,如果是这种情况,指明其唯一的转变是到一个结束点也是无害的。这样,当其他人阅读您的图时,他或她知道您已经考虑了如何退出这些活动。
第三步,添加活动如果您正对一个用户案例建模,对每个角色(actor)所发出的主要步骤引入一个活动(该活动可能包括起始步骤,加上对起始步骤系统响应的任何步骤)。如果您正对一个高层的商务流程建模,对每个主要流程引入一个活动,通常为一个用户案例或用户案例包。最后,如果您正对一个方法建模,那么对此引入一个活动是很常见的。
第四步,添加活动间的转变我的风格总是应该退出一个活动,即使它是转变到一个结束点。一旦一个活动有多个转变时,您必需对每个转变加以相应标示。
第五步,添加决策点有时候,您所建模的逻辑需要做出一个决策。有可能是需要检查某些事务或比较某些事务。要注意的是,使用决策点是可选的。
第六步,找出可并行活动之处当两个活动间没有直接的联系,而且它们都必需在第三个活动开始前结束,那它们是可以并行运行的。
下面的活动图描述了大学新生第一次将如何办理入学的商业逻辑。
- 实心圆表示活动图的起点,实际上是一个占位符,带边框的实心圆表示终点。
- 圆角矩形表示执行的过程或活动。在该图中,虽然您会注意到“登记研习班”用例将多次调用“登记研习班”活动,但这些活动却相当紧密地映射到用例。活动可以细致得多,特别在选择记录方法逻辑,而不是高级商业过程时。
- 菱形表示判定点,虽然在此示例中判定点只有两种可能结果;但即使有更多可能结果,它也同样容易。
- 箭头表示活动之间的转换,各种活动之间的流动次序。
- 箭头上的文字表示继续转换所必须满足的条件,总是使用格式“[条件]”来描述。我猜想,在 UML 的将来版本中,我们将会看到使用 UML 约束表示法(如“{condition}”)记录的条件。
- 粗线条表示可能会并行进行的过程的开始和结束;在大学里成功入学后,必须参加指定的概况介绍,还要至少登记一个研习班并交付一部分的学费。
退出活动可能有几种方法,如您看到的“填写入学表”活动的那样。如果正确填写了表格,那么可以继续进行大学的入学手续。但是,如果表格不正确,那么必须获得帮助(可能从注册员获得帮助)以正确填写它们。
这个活动图非常有趣,因为它省掉了图 2 中标识的几个用例的逻辑。用例模型没有很好地表达处理的顺序是件好事。例如,虽然图 2 中显示的用例图为您清楚地描述了该系统所执行的功能类型,但是它没有明确地表达这些用例可能发生的顺序。但是,图 1 的活动图做到了这一点。总之,不同模型的优缺点各有不同。
中标识的几个用例的逻辑。用例模型没有很好地表达处理的顺序是件好事。例如,虽然 中显示的用例图为您清楚地描述了该系统所执行的功能类型,但是它没有明确地表达这些用例可能发生的顺序。但是, 的活动图做到了这一点。总之,不同模型的优缺点各有不同。
泳道
将模型中的活动按照职责组织起来通常很有用。例如,可以将一个商业组织处理的所有活动组织起来。这种分配可以通过将活动组织成用线分开的不同区域来表示。由于它们的外观的缘故,这些区域被称作泳道。 图 7–2 表示了泳道。
图 7–2 泳道和对象流
· 2. 对象流
活动图能表示对象的值流和控制流。对象流状态表示活动中输入或输出的对象。对输出值而言,虚线箭头从活动指向对象流状态。对输入值而言,虚线箭头从对象流状态指向活动。如果活动有多个输出值或后继控制流,那么箭头背向分叉符号。同样,多输入箭头指向结合符号。
图 7–2 表示一个活动和对象流状态都被分配到泳道中的活动图。
· 活动和其他图
活动图没有表示出计算处理过程中的全部细节内容。它们表示了活动进行的流程但没表示出执行活动的对象。活动图是设计工作的起点。为了完成设计,每个活动必须扩展细分成一个或多个操作,每个操作被指定到具体类。这种分配的结果引出了用于实现活动图的对合协的设计工作。