UML笔记 – 活动图
1. 概述
活动图(activity diagram)用于对一个系统的动态方面进行建模。多数情况下,它扩对计算过程中顺序的、并发的步骤进行建模。当对象在控制流的不同点上从状态到状态移动时,用活动图也可对该对象的控制流进行建模,也就是对工作流建模。应用前者时,实际上等同于流程图。
和交互图相比,交互图强调的是从对象到对象的控制流,而活动图强调的是从活动到活动的控制流;交互图观察的是传送消息的对象,而活动图观察的是对象之间传送的操作。
一个活动是一个状态机中进行的非原子的执行单元,活动最终会导致一些动作,这些动作由可执行的原子计算组成,这些计算会导致系统状态的改变或者一个值的返回。
活动图是一种状态机,所以它可以适应状态机的全部特性。
2. 基本概念
2.1 活动状态和动作状态
可执行的原子计算被称为动作状态。动作状态不能被分解,而且,动作状态是原子的,也就是事件可以发生,但动作状态的工作不能被中断。动作状态的工作所占有的事件一般被看做是忽略的。
活动状态则能够进一步被分解,他们的活动可以由其他的活动图表示。而且,活动状态不是原子的,也就是说他们可以被中断,一般来说,还要考虑到它需要花费一段时间来完成。可以把活动状态看成是一个组合,它的控制流由其他的活动状态和动作状态组成。换句话来说,一个活动状态在语意上等同于在适当的地方展开它的活动图(并且如此传递下去),直到图中仅看到动作为止。
活动状态和动作状态的表示法是一致的,用两端为半圆的矩形来表示(不同的UML工具对此实现并不一致)。但活动状态可以有附加部分,如进入和退出动作,以及子状态机说明。
2.2 转换
无触发转换(完成转换):没有限定条件,一旦源状态工作完成,控制会立刻传送。
触犯转换:有限定条件,在设定的条件完成后,控制才会转移。
一般情况下,完成转换已经可以对大多数情况进行建模。
初始状态:用一个实心球表示。
停止状态:用一个圆圈内的实心球表示。
2.3 分支
用一个菱形(钻石型)表示分支。一个分支可以有一个进入转换和两个或者多个离去转换。可以使用关键字else来标记一个离去转换,它表示如果其他的监护表达式都不为真时所执行的操作。
2.4 分叉和汇合
对业务的工作流建模时,可能会遇到并发流。在UML中,用一个同步棒来说明这些并行控制流的分叉和汇合。一个同步棒用一条粗的水平或垂直的线表示。
一个分叉表示把一个单独的流分成2个以上的控制流,一个分叉有一个进入转换和多个离去转换。
一个汇合表示2个或更多的并发控制流的同步发生。在汇合处,并发的流取得同步,这表示每个流都等待着,直到所有进入流都到达这个汇合处。
汇合和分叉应该是平衡的,即离开一个分叉流的数目应该和进入它的对应的汇合流的数据相匹配。位于并行控制流的活动也可以通过信号来相互通信。这种被称为协同例程。多数情况下用主动对象来对此建模。
2.5 泳道
泳道是包的一种。泳道将一个活动图中的活动状态分组,每一族表示负责那些活动的业务组织;每个泳道代表一个活动图的全部活动中部分活动的高层职责,并且泳道可能由一个或多个类来实施。
2.6 对象流
对象可以被包含在一个与活动图相关的控制流中。通过把这些对象放置在活动图中,并用依赖将他们连接到对它们进行创建、撤销、修改的活动转换上。这种对依赖关系和对象的应用被称作十一个对象流,因为它描述了一个对象在一个控制流中的参与情况。
在表示时,可以在对象名下面的方括号中命名它的状态。
3. 使用方式
通常有两种使用活动图的方式:对工作流建模和对操作建模。
3.1 对工作流建模
此时,关注于与系统进行协作的参与者所观察到的活动。在这种用法中,对对象流的建模是特别重要的。
3.2 对操作建模
此时,把活动图作为流程图来使用,对一个计算的细节部分建模。在这种用法中,对分支、分叉和汇合状态的建模是特别重要的。