在UML里,活动图本质上就是流程图,它描述系统的活动、判定点和分支等。它对开发人员来说是一种重要的工具。
活动是某件事情正在进行的状态,既可以是现实生活中正在进行的某一项工作,也可以是软件系统中某个类对象的一个操作。活动在状态机中表现为由一系列动作组成的非原子的执行过程。
定义
活动图是 UML 中描述系统动态行为的图之一,用于展现参与行为的类的活动或动作。
UML 中,图形上活动图里的活动用圆角矩形表示;一个活动结束自动引发下一个活动,则两个活动之间用带箭头的连线相连接,连线的箭头指向下一个活动;起点用实心圆表示,终点用半实心圆表示;分支与合并的图标和状态图中判定的图标相同,而分叉与汇合则用一条加粗的线段表示。
模型如下图所示:
组成元素
UML 的活动图中包含的图形元素有动作状态、活动状态、动作流、分支与合并、分叉与汇合、泳道和对象流等。
动作状态
活动图包括动作状态和活动状态。对象的动作状态是活动图最小单位的构造块,表示原子动作。在UML里,动作状态是以执行指定动作,并在此动作完成后通过完成变迁转向另一个状态而设置的状态。动作状态表示状态的入口动作。入口动作是在状态被激活的时候执行的动作,在活动状态机中,动作状态所对应的动作就是此状态的入口动作。
活动状态
对象的活动状态可以被理解成一个组合,它的控制流由其他活动状态或动作状态组成。
动作流
当一个动作状态或活动状态结束时,该状态就会转换到下一个状态,这就是无触发转移或称为自动转移。无触发转移实际上是没有任何特定的事件触发的转移,即当状态结束工作时就自动的发生转移。
分支与合并
在软件系统的流程图中,分支十分常见,它描述了软件对象在不同的判断结果下所执行的不同动作。在 UML 中,活动图也提供了描述这种程序结构的建模元素,这被称为分支。
在活动图中分支与合并用空心小菱形表示。分支包括一个入转换和两个带条件的出转换,出转换的条件应当是互斥的,这样可以保证只有一条出转换能够被触发。合并包括两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。
如图所示:
分叉与汇合
在建模过程中,可能会遇到对象在运行时存在两个或多个并发运行的控制流。在 UML 中,可以使用分叉把路径分成两个或多个并发流,然后使用结合,同步这些并发流。
汇合代表两个或多个并发控制流同步发生。当所有的控制流都到达汇合点后,控制才继续向下进行。一个汇合可以有两个或多个转换和一个输入输出转换。
图形上,分叉和汇合都使用同步条表示。同步条是一条粗的水平线。
如图所示:
泳道
泳道将活动图的活动状态分组,每一组表示负责那些活动的业务组织。在活动图里泳道区分了活动的不同职责,在泳道活动图中,每一个活动都只能明确的属于一个泳道。从语义上,泳道可以被理解为一个模型包。
泳道可以用于建模某些复杂的活动图。这时,每一个泳道可以对应于一个协同,其中活动可以由一个或多个相互连接的类的对象实现。
在 UML 中,泳道是活动图中的一些垂直展现,把它的邻居隔开,泳道之间可以有转换。活动图中的每个泳道必须有唯一的名字以区别于其他泳道。对象流
用活动图描述某个对象时,可以把所涉及的对象放置在活动图上,并用一个依赖将这些对象连接到对它们进行创建、撤销和修改的活动转换上。这种依赖关系和对象的应用被称为对象流。
对象流是动作和对象间的关联。对象流可用于对下列关系建模:动作状态对对象的使用以及动作状态对对象的影响。
建模步骤
(1)识别要对其工作流进行描述的类;
(2)对动态状态建模;
(3)对动作流建模;
(4)对对象流建模;
(5)对建模结果进行精化和细化。
与流程图区别
名称 | 着重点 | 是否表示并发活动 | 面向 |
---|---|---|---|
流程图 | 着重描述处理过程,主要控制结构是顺序、分支、循环 | 不可以表示并发活动的情形 | 面向过程 |
活动图 | 描述对象活动的顺序关系遵循的规则,着重表现系统行为 | 可以表示并发活动的情形 | 面向对象 |