作为UML图例中的重要角色,活动图描述的是对象活动的顺序关系所遵循的规则,作为用例实现的描述,非常适合于和用户沟通,同时也有助于为开发提供指导。
一、活动图简介
活动图(activity diagram)是阐明了业务用例实现的工作流程。业务工作流程说明了业务为向所服务的业务主角提供其所需要的价值而必须完成的工作,业务用例由一系列活动组成,他们共同为业务主角生成某些工件。工作流程通常包括一个基本的工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流程。
二、基本元素
1、活动图起点:活动的开始节点,实心黑色圆点,只能有一个。
2、活动图终点:表示整个活动的结束,圆圈加内部实心黑色圆点,可以有多个结束点。
3、流终点:表示子流程的结束,圆圈加内部叉。
4、活动状态(activity):用于表达状态机中的非原子的运行 (1)、活动状态可以分解成其他子活动或者动作状态。 (2)、活动状态的内部活动可以用另一个活动图来表示。 (3)、和动作状态不同,活动状态可以有入口动作和出口动作,也可以有内部转移。 (4)、动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是一个动作状态。 活动状态和动作状态的图标相同,但是活动状态可以在图标中给出入口动作和出口动作等信息。
5、动作状态(actions):是指原子的不可中断的动作,并在此动作完成后通过完成转换转向另一个状态 (1)、动作状态是原子的,它是构造活动图的最小单位。 (2)、动作状态是不可中断的。 (3)、动作状态是瞬时的行为。 (4)、动作状态可以有入转换,入转换既可以是动作流,也可以是对象流。动作状态至少有一条出转换,这条转换以内部的完成为起点,与外部事件无关。 (5)、动作状态与状态图中的状态不同,它不能有入口动作和出口动作,更不能有内部转移。 (6)、在一张活动图中,动作状态允许多处出现。
6、动作状态约束(action constraints):用来约束动作状态,有前置条件和后置条件之分
7、动作流(control flow):动作之间的转换,用带箭头的直线表示,箭头的方向指向转入的方向,简单来讲,就是让动作状态流动起来。
8、对象:矩形的方框,如果一个操作执行结束之后生成了某些数据需要传递给下一个目标操作,此时需要用对象节点表示。作为动作状态的输出或是动作状态的输入。
9、对象流:是动作状态或活动状态与对象之间的依赖关系,表示动作使用对象或动作对对象的影响。简单来说就是对象的产生或者使用过程。
(1)、一个对象可以由多个动作操作。
(2)、一个动作输出的对象可以作为另一个动作输入的对象。
(3)、在活动图中,同一个对象可以多次出现,它的每一次出现表面该对象正处于对象生存期的不同时间点。
10、分支与合并:用菱形表示,它有一个转换(箭头从外指向分支符号),一个或多个离开转换(箭头从分支符号指向外)。每个离开转换都会有一个监护条件,用来表示满足什么条件的时候执行该转换.
11、分叉与汇合:分叉用于将动作流分为两个或多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的,对象在运行时可能会存在两个或多个并发的控制流,为对并发的控制流建模,UML中引入了交叉与汇合的概念
分叉形式
汇合形式
12、泳道:将活动图中的活动划分为若干组,每一个活动只允许属于一个组,并把每一个组指定个负责这组活动的业务组织,设置一个组(业务组织)名称作为泳道的名称。利用泳道图可以很方便描述多个角色之间的协作、部门之间的协作等非常有效。泳道形式上有纵向和横向两种。
三、活动图、流程图、状态图的区别
活动图与流程图区别:
(1)、流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系。而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程,但活动图在本质上是一种流程图。
(2)、活动图能够表示并发活动的情形,而流程图不行。
(3)、活动图是面向对象的,而流程图是面向过程的。
活动图与状态图区别:
(1)、描述对象不同,状态图是描述某一对象的状态转化的,它主要是展示的是对象的状态,描述的是一个对象的事情。利用状态图我们可以看出,对象在接受了事件刺激后,会做出什么样的反应。
(2)、使用场合不同,状态图描述对象在生命期中的自身状态变化,描述用例中的业务流程变化。
四、简单案例
结合业务中一个添加报价单的用例,设计活动图,泳道中的业务组织分为业务员和应用系统。业务员填写一份报价单并提交,应用系统执行参数判定,如参数均正确则开始处理计算报价单价格并发送消息通知给相关人员,如不正确,则提示给业务人员修改报价单。
至此,针对UML活动图的相关内容做了大概的总结,结合开发中的场景,先规划好用例,再针对具体用例设计活动图,方便开发过程。