一、什么是活动图?
活动图是UML用于对系统的动态行为建模的常用工具,它描述活动的顺序。活动图在本质上是一种流程图,着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。
活动图中常用的符号
活动图的一个例子
二、活动图的基本要素?
活动图的主要组成元素包括动作、活动、动作流、分支与合并、分叉与汇合、泳道和对象流等。
某银行ATM机中的取款活动图:
1、活动(Activity):命令的执行
在UML中,活动的图符如下图表示:
活动图(Activity Diagram)
2、起始状态(Start State)与终止状态(End State):表示活动的起点与终结
图符表示如下:
活动图(Activity Diagram)
3、状态转移(State Transition):用带箭头的实线表示,表示从一个活动到另一个活动的转移。
活动图(Activity Diagram)
4、判断(Decision):也可以理解为分支,对于同一触发事件,可以根据不同的条件转向不同的活动,每一个可能的转移都是一个分支。用菱形框表示:
活动图(Activity Diagram)
5、分叉与汇合:表示系统或对象中的并发行为。分叉表示把一个单独的控制流分成两个或多个并发的控制流。汇合表示两个或多个并发控制流的同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。
分叉节点与结合节点:
分叉节点是从线性流程进入并发过程中的过渡节点,它拥有一个进入控制流和多个离开控制流。不同于判断节点,分叉节点的所有离开流程都是并发关系,即分叉节点使执行过程进入多个动作并发的状态。
活动图(Activity Diagram)
6、泳道:将一个活动图中的活动状态分组,每一组表示一个特定的类、人或部门,它们负责完成组内的活动。每个活动都明确属于一个泳道,不可以跨越泳道,但是转移则可以跨越泳道。
三、活动图的作用?
1、描述一个操作的执行过程中所完成的工作或者动作;
2、描述对象内部的工作;
3、显示如何执行一组相关的动作,以及这些动作如何影响周围对象;
4、描述用例的执行;
四、什么情况下使用活动图?
在实际项目中,活动图并不是必须的,一般在以下情况需要使用活动图:
1、描述一个并行的过程或者行为;
2、描述一个算法;
3、描述一个跨越多个用例的活动。
在以下场合中是不使用活动图的:
1、显示对象之间的合作;
2、显示对象在其生命周期内的运作情况。
下面是用Rational Rose 画的机房收费系统的活动图:
带泳道的活动图
泳道表明每个活动是由哪些人或哪些部门负责完成。
每个泳道代表特定含义的状态职责的部分。在活动图中,每个活动只能明确的属于一个泳道,泳道明确的表示了哪些活动是由哪些对象进行的。
每个泳道都有一个与其他泳道不同的名称。
每个泳道可能由一个或者多个类实施,类所执行的动作或拥有的状态按照发生的事件顺序自上而下的排列在泳道内。
在活动图中泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。
在包含泳道的活动图中每个活动只能明确地属于一个泳道
小明起床的活动图
用户进行网上预约,用户填写预约内容选取预约时间并提交预约
活动图中的“分叉与合并”很像我们平常生活中的两条路径,它描述了软件对象在不同的判断结果下所执行的不同动作。一条是“Yes”的路,一条是“No”的路,就看你的操作是要执行哪条路径,但最后终是会走到终点的
“分叉和汇合”像我们学数据库中“and”的关系,当进入考场后,老师检查证件,学生对号入座,他们同时在做一件事情
系统中“用户登录”的应用
状态图
活动图
分叉和汇合
分叉
用于将一个控制流分为两个或多个并发运行的分支。
汇合
用于将两个或多个控制流合并到一起形成一个单向的控制流,符号与分叉相同。
如果一个控制流在其他控制流到达之前到达了连接,它将会等待,知道所有控制流都到达了才会向连接传递控制权。
实例:销售合同从签订到履约的过程
销售合同签订后,要进行核对。如果发现错误,则终止履约;如果没有错误,则要核对货物清单确定是否有货,还要核对付款单确定对方是否已经付款,只有这两项都完成,才可以发货。如果无货或对方尚未付款,则终止履约。则活动图如下:
泳道
泳道表明每个活动是由哪些人或哪些部门负责完成。
在活动图中泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。
在包含泳道的活动图中每个活动只能明确地属于一个泳道。
简单模拟卓越网的购物流程
添加泳道之后:
从左到右:顾客、运输部、财务部
对象流
用活动图描述某个对象时,可以将涉及到的对象放到活动图中,并用一个依赖将其连接到活动或状态上,对象的这种使用方法就构成对象流。
上面的购物过程的活动图加入对象流之后:妆容
在购买商品的流程中,用户支付成功之后需要修改支付订单的状态为成功,同时需要生产快递单以进行配送,这两个动作可以并行执行,则可以表示为:
fork、join 节点
fork、join节点与上面的决策、合并节点类似,都是将一个流程分叉成多个子流程链路,最终再合并到一起,不同的是,fork节点分叉出的子流程是并行执行的,也就是异步操作。join节点也很好理解,就是在某个位置等待所有异步执行的流程都执行完毕后,再合并成同一个流程运行。
fork、join节点都是通过一根又黑又粗又长的直线来表示的,如下图:
起床上班活动图
活动图的主要组成元素包括动作、活动、动作流、分支与合并、分叉与汇合、泳道和对象流等。
例如取款活动图:
产品生命周期活动图中活动节点展示: