1 活动图基本概念
事件流除了用文本形式来表示外,还经常用活动图来表示。为什么有了文本形式以后还要开发这种框图形式呢?这是因为利用文本形式虽然很有用,但是如果事件流逻辑复杂,则文本形式比较难阅读和理解,利用框图将比文本形式来得更加有效。
活动图显示与文本事件流相同的信息。我们在业务模型中用活动框图描述业务过程的工作流。
2 活动图的组成要素
活动图的组成要素主要有:起始点和终止点、活动、迁移、决策框、分支和汇聚。
2.1 起始点和终止点
用一个实心圆表示初始节点,用一个圆圈内加一个实心圆来表示活动终点。起始点和结束点都是特殊的活动节点。如下图所示。
- 起始点:指明活动开始位置;一个活动图只能有一个起始点。
- 终止点:指明活动的结束位置;一个活动图可以有多个结束点,不同的结束点表达系统执行后可以达到不同的结果状态。
2.2 活动
活动是活动图的基本组成部分,一个活动图至少应该包括一个活动。活动用以下符号表示。
另外,可以在活动中增加更多详细的步骤,并且我们通常在这些操作前面加上一些标记字样。如进入活动室发生的操作,标有entry字样;活动进行时发生的操作,直到离开活动,标有do字样;离开活动时发生的操作,标有exit字样;特定事件发生时的操作,标有event字样和事件名。如下图所示。
2.3 迁移
迁移指定某活动完成后下一个即将执行的活动。迁移可描述活动的执行顺序。迁移又称控制流。迁移标记格式为<事件>[<守护条件>],如下图所示。
语义:当活动1结束时,发生了事件,且守护条件成立,则进入活动2。
约束规则:不允许在一个活动图中出现两个标记完全相同的迁移。如果一个活动有多个事件相同的迁移出口,则必须用守护条件进行区分。
举例:如,在一个有红绿灯的人行道口,汽车在等待绿灯。司机先准备好启动,待绿灯变亮且观察到无行人过马路情况下开动汽车。如下图所示。
迁移的两种类型:
- 无事件迁移:迁移有向线上无事件标签。意味着,只要完成了上一个活动,则自动进入下一个活动。
- 有事件迁移:迁移有向线上有事件标签。也可能有守护条件。
事件和分支:
事件:是对一个在时间和空间上占有一定位置的有意义的事情的详细说明。
- 原因:事件产生的原因有调用、满足条件的状态的出现、到达时间点或经历某一时间段、发送信号等。
分类:
调用事件(call event)。调用事件表示的是对操作的调度,其格式如下:eventname(参数1,参数2,…参数n)
信号事件(signal event)。信号事件表示的是对象接收到了信号这种情况,信号事件往往会触发状态的转移。
- 这里提到了信号这个概念,所谓信号,就是由一个对象异步地发送、并由另一对象接收的已命名的对象
- 信号事件和调用事件的表示格式是一样的
- 信号事件是异步事件,调用事件是同步事件
变化事件(change event)。如果一个布尔表达式中的变量发生变化,使得该布尔表达式的值相应地变化,从而满足某些条件,则这种事件称作变化事件
变化事件用关键字when表示
时间事件(time event)。时间事件指的是满足某一时间表达式的情况的出现,例如到了某一时间点或经过了某一时间段。
时间事件用关键字after或when表示
分支(branch):在活动图中,对于同一个触发事件,可以根据不同的守护条件转向不同的活动,每个可能的转移是一个分支
- 在活动图中,对于同一个触发事件,可以根据不同的守护条件转向不同的活动,每个可能的转移是一个分支。
- 守护条件又称控制点
2.4 决策框
定义:决策框是一个无动作的特殊活动框。它仅仅是根据上一个活动执行后产生的条件判断,决定执行哪一条转换,而不做任何实际动作。因此,它是一种无动作节点,仅仅是用于描述某个执行流程的语法/语义结构。
决策框又称决策点
守护条件和决策框分别称为控制点和决策点,它们有什么区别呢?
守护条件可以增强活动图,使用控制点和决策点可以建模修改活动图流程的条件
- 控制点用来允许控制流仅沿着满足预置条件的方向
- 决策点需要对控制流继续的方向作出决策
简单来说,守护条件中的条件可以是无关系的,而决策框中的分支条件必须是有关系的。
2.5 分叉(fork)
定义:一种用于标识可并发活动的语法/语义符号
语义:分叉没有任何动作,仅仅表明分叉后变迁流入的活动没有执行顺序依赖关系,可以并行执行。如下图中,活动2与活动3可以并行执行,但它们都必须在活动1完成之后才能执行
约束规则:只允许一个活动引发分叉
2.6 汇聚(joint)
定义:一种用于标识需同步活动的语法/语义符号。
语义:汇聚也没有任何动作,仅仅表明汇聚前变迁流出的活动必须全部执行完才能执行汇聚后变迁指向的
活动。如下图中,活动2与活动3同步执行完成后,活动4才能执行。
约束规则:只允许汇聚到一个活动。
3 带泳道的活动图
4 活动图建模原则
“活动图” 比较直观易懂;与传统的流程图十分的相近,只要能够读懂活动图,就不难画出活动图。
绘制时首先决定是否采用泳道:主要根据活动图中是否要体现出活动的不同实施者。
然后尽量使用分支与汇聚等基本的建模元素来描述活动控制流程。
如果需要,加入对象流以及对象的状态变化来表示更多的信息。但是,需要注意活动图的建模关键是表示出控制流,其它的建模元素都是围绕这一宗旨所进行的补充。
对工作流建模:用于业务建模的时候,每一条泳道表示一个职责单位,该图能够有效地体现出所有职责单位之间的工作职责,业务范围及之间的交互关系、信息流程。
建模时应遵循以下策略:
- 为工作流建立一个焦点,除非你所涉及的系统很小,否则不可能在一张图中显示出系统中所有的控制流;
- 选择对全部工作流中的一部分有高层职责的业务对象,并为每个重要的业务对象创建一条泳道。
- 识别工作流初始节点的前置条件和活动终点的后置条件,这可有效地实现对工作流的边界进行建模。
对操作建模:每一个对象占据一个泳道,而活动则是该对象的成员方法。
建模时应遵循以下策略:
- 收集操作所涉及的抽象概念,包括操作的参数、返回类型、所属类的属性以及某些邻近的类。
- 识别该操作的初始节点的前置条件和活动终点的后置条件。也要识别在操作执行过程中必须保持的信息。
- 从该操作的初始节点开始,说明随着时间发生的活动,并在活动图中将它们表示为活动节点。
- 如果需要,使用分支来说明条件语句及循环语句。