活动图

活动图是一种表达系统动态行为的图,提供了流程的可视化描述。
对于用例图中的用例,我们很难看到潜在的问题,因为其流程及具体操作我们是不知道的。比起用文字描述的用例规格说明,使用活动图将用例的复杂流程可视化会更加清晰明了,便于理解。

一. 基本概念

UML 活动图-LMLPHP

1. 动作(Actions)

活动包含许多动作,动作是活动的基本单位,具有原子性。动作一般用圆角矩形来表示,动宾结构描述。
活动图中还有活动状态(可分解),也用圆角矩形表示,但其中能包含一个完整活动。动作实际上是活动状态的一个特例。如果一个活动只由一个动作,那么它就是一个动作状态。
动作和活动状态也可以叫作动作节点和活动节点
如果圆角矩形右下角有一个叉子的符号,则该动作为 callBehavior类型,我的理解是该动作会直接调用另一个活动。调用动作所属的活动与被调用活动是两个独立的活动,为不相关集。

2. 开始和终止

活动图展示的是一个流程,那么必然由开始和结束。一个流程有且仅有一个开始节点,但至少有一个结束节点。开始节点为实心黑点,终止节点为一个圆圈,有点像小黄人的眼睛?: )

3. 判断节点和合并节点

判断节点 用菱形表示,具有一个进入流程和多个离开流程,类似于 switch 分支语句。离开流程应该包括进入流程产生的所有可能结果要走的路径。
合并节点 同样用菱形表示,但合并节点具有多个进入流程并导向一个离开流程。
需要注意的是,判断节点和合并节点都只表示逻辑意义,并不意味着动作的并发执行或者其他时间或数据同步的操作,这对区分他们与分叉节点,结合节点很关键

4. 分叉节点和结合节点

分叉节点在图中表示为有一个进入箭头多个离开箭头的粗横线,其与判断节点的区别在于并发,判断节点只执行其中一个离开流程,而分叉节点的进入流程会导致多个离开流程的并发,其常常与结合节点合用来表达并发的过程。
结合节点在图中则表示为有多个进入箭头一个离开箭头的粗横线,对于结合节点来说,必须完成所有的进入流程后,才能进行离开流程,
分叉节点和结合节点的组合使用可以概括为表现多个流程的同进同出

5. 分区(泳道)

分区的目的是为了说明具体活动的执行对象,一般是用户,系统之类。除此之外,对处于不同泳道的并发活动进行分区并列,可以更加清晰地表达并发的进行。

6. 对象流

对象用矩形表示,有时动作的发生可能涉及到对象的变化,通过添加对象流可以直观地表达出对象的变化,比如给油箱加油,我们可能需要这么一个油箱对象,表达油箱当前的状态,如果油量很低则执行动作【加油】,让油量达到满的状态。不建议在活动图添加过多对象,会使得图变得复杂而笨拙,应该均衡其利弊而使用。

二. 实际案例

下面将以一个【预订运动场地】活动为例,画出活动图

  1. 我们要确定有多少个参与者,即泳道条数,我这里有普通用户,订单处理系统以及预约管理系统
    UML 活动图-LMLPHP

  2. 我们要预约场馆,是不是得先告诉系统用户要做什么运动,在什么时候运动。然后预约管理系统就会筛选出满足条件的场馆,如果一个没有,那么预订失败;如果有符合条件的场馆,ok用户再去看这些场馆的信息,用判断节点来表达。
    UML 活动图-LMLPHP

  3. 找到心仪的场馆然后填写预约信息,又订单管理系统参与生成订单,要注意只有用户选择完支付方式后,我们才会执行动作支付预约费用(联系我们使用淘宝的时候!!),所以这是并发的动作。我们上面提到了,用分叉节点和结合节点表示并发。最后在判断节点控制下导向结果预约成功和预约失败,最后的活动图如下
    UML 活动图-LMLPHP

三. 总结

画活动图就是描述一个活动的可视化流程,在画活动图之前,脑海中应该有大致的流程,先做什么后做什么,注意哪些动作是并发,然后梳理清楚,才不至于出来的图有交叉很乱的情况。
我画的也挺粗糙,仅仅用了活动图的基本概念,之后代入角色反复思考,多实践了。

10-28 03:35