UML _ 活动图
概述
活动图(Activity Diagram)是一种表达系统动态特性的模型图,用来表达动作序列的执行过程。
通常,活动图用于记录单个用例或商业过程的逻辑流程。
与流程图相似,但其语义要比流程图丰富。
区别:
-
活动图强调执行过程中的顺序、分支和并发步骤,并可以展示活动之间信息的流动。
-
流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环。
-
活动图是面向对象的,而流程图是面向过程的。
活动图与状态机图的区别
-
活动图着重表现多个对象从一个活动到另一个活动的控制流,是内部处理驱动的流程,不需要任何触发事件。
-
状态机图着重描述一个对象从一个状态到另一个状态的流程,主要有外部事件的参与。
-
活动图能够划分泳道,而状态机图不可以。
作用
- 描述一个用例的工作流程
(最常用)
; - 描述业务处理过程;
- 描述一个操作执行过程中所完成的工作;
- 描述复杂过程的算法。
活动图的组成
1. 活动节点(结点)ActivityNode
-
可执行节点(动作节点、活动节点)
-
控制节点
初始节点、终止节点
判断、合并( decision 、merge)
分叉、汇合 -
对象节点
2. 活动边ActivityEdge
- 控制流
- 对象流
3. 活动分区(泳道)
4. 扩展区域
活动节点(结点)
活动节点分为:
-
可执行节点(动作节点、活动节点)
-
控制节点
初始节点、终止节点
判断、合并( decision 、merge)
分叉、汇合 -
对象节点
可执行结点
可执行节点分为:动作结点 和 活动结点
动作结点是一种特殊的活动结点:动作结点一般用于描述简短的操作,而活动结点用于描述持续事件或复杂计算。
表示:平滑的圆角矩形
动作结点
动作结点代表一个原子操作,是构造活动图的最小单位,通常用于对工作流执行过程中的步骤进行建模。
注意:
- 动作结点要么不执行,要么完全执行,不可中断。
- 动作结点是瞬时的行为,占用处理时间短。
- 动作结点不能有入口动作、出口动作和内部转换。
- 在一张活动图中,同一动作结点允许多处出现。
常见动作:
- 创建或删除对象
- 发送消息
- 调用操作
- 数学运算
- 返回表达式的值。
活动结点
活动结点是一系列动作,主要用于实现动作序列的简化,显然活动节点是非原子性的。
注意:
- 活动结点是可被中断的。
- 活动结点的内部活动可以用另一个活动图表示。
- 活动结点可以有入口动作、出口动作和内部转换,至少有一个输出完成转换。
因此动作结点是一种特殊的活动结点: 动作结点一般用于描述简短的操作,而活动结点用于描述持续事件或复杂计算。
控制结点
初始结点和终止结点
表示
初始结点:
标记活动图的开始,表示业务处理过程的开始;
一个活动图中必须有且仅有一个初始结点(嵌套情况除外)。
终止结点:
标记活动图的结束,表示业务处理流程完成;
一个活动图中一般至少有一个结束标记。(存在一些特殊的无穷过程不存在终止标记)
判断与合并
都是用空心的菱形表示。
判断(决策)
类似于选择
用于进行逻辑判断,描述基于某个条件的可选择路径。
组成:一个判断可以有:
- 一个进入控制流
- 两个或多个输出控制流
每个输出控制流上必须都有监护条件。
注意:
监护条件要有中括号[]
- 在所有输出控制流中,其监护条件应互斥,且应覆盖所有可能。
合并
是指两个或多个控制路径在此汇合的情况。
分叉与汇合
分叉(分岔)与汇合用于对并发运行的控制流建模。
表示:用加粗的水平/竖直的直线段表示
注意:分叉与汇合不是必须有监护条件
分叉
表示把一个单独的控制流分成两个或多个并发的控制流。
一个分叉可以有一个进入控制流和两个或多个输出控制流。
汇合
表示两个或多个并发控制流的同步完成,收束回同一流程。
一个汇合可以有两个或多个进入控制流和一个输出控制流。
对象节点
当活动图中描述的过程具有一些对关键对象的要求时,通过添加对象节点的方法可以在活动图中呈现操作的对象。
活动图中的对象节点除了对象名称, 还可以带有状态。
表示:
活动边
活动边是活动图中的关系元素,包括控制流和对象流。
活动边就是类似于关系
表示:
- 控制流(转换):用一条带箭头的实线段表示。
- 对象流:UML1.x中,用带箭头的虚线段表示; UML2.x中,用带箭头的实线段表示。
控制流(转换)
控制流(Control Flow) ,曾称为转换,是活动图中用于标识控制路径的一种符号,描述活动与活动之间的关系。
注意:
-
与状态机图中的转换不同,活动图的控制流不需要特定事件的触发,一个活动执行完成后会自发转换到另一个活动。
-
控制流从活动图的初始结点开始运行,经过顺序、分支等结构引导着各个活动的连续执行。
表示:
用一条带箭头的实线段表示。
例子:
对象流
对象流(Object Flow) 是将对象结点作为输入或输出的控制流,描述活动与对象之间的关系,以及相互的影响。
(依赖关系)
表示:
UML1.x中,用带箭头的虚线段表示; UML2.x中,用带箭头的实线段表示。
活动分区(泳道)
活动图能够将元素的行为顺序表现出来,但 元素的行为是有交互的。到目前为止,我们 所学到的活动图,暂时还无法表示出这样一种交互关系。
为了对活动的职责进行组织,可以在活动图中按负责对象(活动的执行者) 将活动分为不同的组,称为活动分区(Activity Partition),也称为泳道(Swimlane)。
作用:
描述每个活动是由哪个对象负责完成。
注意:
-
每个活动只能明确地属于一个泳道,活动不允许跨越泳道。
-
只有转换、动作流、 和对象流,能够穿越泳道的分隔线。
表示:
每个泳道通过垂直或水平实线与它的邻居泳道分隔,泳道上方或左侧是它的名称。
例子1:
例子2
无泳道
有泳道
扩展区域(循环)
循环一般不用扩展区域,而是使用判断后在连一条回去的控制流
是表示业务过程中的某个活动片段的模型,在活动图中通常用来表示活动的循环过程。
扩展区可以标识一个或多个活动需要多次执行的情况。
表示:
循环一个结点
循环多个结点
活动图的分类(了解)
-
简单活动图
-
嵌套活动图
-
标识泳道的活动图
-
标识对象流的活动图
-
标识扩展区的活动图
-
标识信号的活动图
-
标识参数的活动图
-
简单活动图
既没有标识活动的执行者,也没有标识活动执行过程中创建了哪些对象。
其中,每个活动都是简单的活动。 -
嵌套活动图
如果一个活动图中包含子活动图,称为嵌套活动图。
包含子活动图的活动,称为组合活动。
当一个活动图很复杂,可以把其中的一组相关活动看做是一个子活动图,用子活动图的简图代替子活动图。 -
标识信号的活动图
信号分类:
时间信号:表示随着时间的流逝而自动发出的信号。
发送信号
接收信号 -
标识参数的活动图
标明每个活动执行前,需要输入哪些参数,活动执行后,需要输出哪些参数,以及要进行的错误处理。
参数分三种:输入参数,输出参数,错误参数。
注意:如果能分析出需要泳道,一般是先建立泳道
活动图的应用
活动图建模,通常应用在以下两个方面:
- 对业务流程建模
- 对用例交互流程建模
对业务流程建模
选择一个将要描述的重要过程,过程中尽量涉及数量少但是关键的对象或参与者,将无关或关联很小的对象排除在外,为每一个对象或参与者绘制泳道。
在总体业务流程中提取关键的动作或活动节点,并且将他们与对象或参与者相对应;若发现有些动作无法对应,则考虑动作是否在这个流程中起关键作用,或者是否遗漏了某些对象或参与者。
规定初始状态;确定过程可能的结束位置,为活动图添加开始和结束节点。
从业务流程的初始节点开始,把过程中发生的动作按事件顺序排列,依次把这些动作添加到活动图中。
把局部的过于复杂的动作序列加以总结,绘制成一个活动节点;如果需要,把这个动作序列使用另外的活动图进行建模。
找出连接这些动作和活动节点的控制流,并且准确找到过程中的判定、分叉、合并与汇合节点。
如果业务流程中有一些关键对象的值或状态需要加以描述,使用对象流添加这些对象在某些动作或活动节点前后的状态描述。
对用例交互流程建模
主要就是根据用例规约建模
一般一个用例,一个活动图
选择概念用例——即从系统对客户提供的各种服务中确定出一个关键业务,这个关键业务可能是在多个相同或不同的情况下反复出现,或者是系统需要提供的一个关键服务或进行的关键操作。
对于当前选择的用例,通过事件流进行顺序叙述,并找出所有的参与者主动动作,把这些动作整理成动作或活动节点。
把参与者和系统划分为两个泳道,如果有除了主参与者以外的其它参与者,也为它们分别划分泳道。
把活动节点纵向按照事件发生顺序、横向按照参与者角色和系统角色对应填入活动图中。
使用活动图对系统的用例进行建模,可以描绘出系统中两个或更多对象之间的过程控制流。
活动图的建模过程
- 标识活动图的用例
- 建模用例的路径
- 绘制完整的活动图
活动图的绘制
- 创建活动图
- 创建初始和终止结点
- 创建动作和活动结点
- 创建控制流
- 创建分叉与汇合
- 创建判定与合并
- 创建泳道
- 创建对象与对象流
示例
下面以“教师修改学生信息”为例。
1. 标识活动图的用例
对于“教师修改学生信息”来说,其参与者是教师,教师在修改学生信息的活动中,涉及3个用例:
2. 建模用例的路径
在开始创建用例的活动图时,往往先建立一条明显的路径执行工作流,然后从该路径进行扩展。
注意事项:
识别出工作流的边界(初始、终止);
识别出工作流中有意义的对象;
识别出各种活动之间的转换;
考虑判定与合并、分叉与汇合的情况。
3. 绘制完整的活动图
对之前建立的工作流路径进行扩展,详细绘制活动图。
注意事项:
考虑用例其他可能的工作流情况(如错误);
使用泳道细化活动图;
按时间顺序自上而下排列泳道内的动作或活动;
使用并发时,不要漏掉任何分支。
实例2
要求:根据下列描述,画出“远程网络教学系统”中系统管理员工作的带泳道的活动图。
问题描述:
1)系统管理员首先要输入账号和密码进行登录,系统验证登录信息;
2)如果验证未通过,提示登录失败;
3)如果验证通过,系统管理员可以处理注册申请和审核课件;
分析:因为管理员可以处理两个事情,所以是分叉与汇合
4)在处理注册申请后,需要发送邮件通知用户处理结果;
通过意思是说,管理员发送邮件通知
5)在审核完课件后,需要进行更新页面信息的操作,以保证用户能看到最新的课件,同时系统也更新页面;
虽然说是同时,但是实际显然是,管理员点击更新页面信息,系统更新页面。
6)当完成所有工作后,系统管理员退出系统,系统则注销系统管理员账号。
分析:
答案:
注意: 更新页面后就可以break,不用汇合。
绘制活动图来表示以下的for循环:
for (i=100;i>=1;i--)
{
if(i%19==0)
print(i);
}
本章重点
①了解活动图与状态机图的区别
②掌握简单活动图的组成元素
③掌握泳道、对象流在活动图中的作用
④了解活动图的分类
⑤熟悉活动图的建模过程,并能根据用户需求创建简单活动图模型