活动图展示从活动到活动的控制流。一个活动(Activity)是一个状态图中进行的非原子的执行单元。活动的执行最终延伸为一些独立动作的执行,每个动作将导致系统状态的改变或消息传送。在图形上,活动图是顶点和弧的集合。
UML活动图中除了活动图符外还有起始活动与终止活动、对象、转移、条件判定、并发活动、接收信号与发出信号、泳道等各种图符。
(1)起始活动:表示活动图中所有活动的起点,一个活动图中有且只有一个起点。
(2)终止活动:表示活动图中所有活动的终点,一个活动图中有一个或多个终点。
(3)对象:若与信号流相连,表示是与活动图中的对象进行交互的其他对象;若与数据流相连,表示是活动的输入产品或输出产品。
(4)条件判定:一种特殊活动,表示活动流程中的判断。通常有多个信息流从它引出,表示决策后的不同活动分支。
(5)并发活动:一种特殊活动,表示活动之间的同步,分为并发分劈与并发接合。一般有一个或多个信息流向它引入,有一个或多个信息流从它引出,表示引入信息流同时到达,引出信息流同时被触发。并发活动图符和状态图符一样用一条粗短实线表示,称为并发(同步)杆。
(6)信号:在活动图中允许出现信号图符,信号图符分为发出信号图符和接收信号图符,发出信号图符为一个一侧为凸尖角的多边形,接收信号图符为一个一侧为凹尖角的多边形。用带实心箭头的虚线表示信号的传输方向。
(7)泳道:用于对活动图中的活动进行分组,同一组活动由一个或多个对象负责完成。
活动图中的基本图符如图6-24所示。
图6-24 活动图的基本图符
活动图一般包括动作、活动结点、流和泳道,像所有其他图一样,活动图也可以包括注解和约束。下面介绍活动图组成元素的基本概念。
1)动作(Action)
动作是可执行的基本功能单元,可能要计算一个设置属性值或返回值的表达式,也可能要调用一个对象的操作,发送一个信号给对象,创建或撤销一个对象等。
动作不能被分解,是原子的,即事件可以发生,但动作状态的内部行为是不可见的,不能只执行动作的一部分,而是要么全部执行,要么不执行。此外动作是即时的,即动作执行的事件可忽略不计。动作用圆角矩形表示。
2)活动结点(Activity Node)
活动结点是活动的组织单元,而一个活动表示多个动作的集合,即活动结点是内嵌的动作组或者是其他嵌套的活动结点。一般来说,活动结点会持续一段时间来完成。可以把动作看作活动结点的特例——动作是一个不能被进一步分解的活动结点。类似地,可以把活动结点看作一个组合,它的控制流由其他的活动结点和动作组成。放大一个活动结点的细节就会发现一个活动图。活动结点和动作之间没有表示法上的差别,只是活动结点可以有附加的部分,这些部分通常由编辑工具在后台维护。
3)控制流(Control Flow)
控制流是指当一个动作或活动结点结束时,马上进入下一个动作或活动结点的流程。在图形上用一个带箭头的实线来表示从一个动作或活动结点到下一个动作或活动结点的控制路径,如图6-25所示。
图6-25 控制流示例
事实上,控制流会从某个地方开始,然后在某个地方结束,图6-25中的起始活动图符和终止活动图符分别表示控制流的开始与结束。
上述控制流是顺序执行的,即动作一个接一个地执行。简单、顺序的控制流是常见的,但并不是对控制流建模的唯一途径。控制流也可以包含分支,描述基于某个布尔表达式的可选择的路径。分支用一个菱形来表示,一个分支可以有一个进入流和两个或多个离去流,在每个离去流上放置一个布尔表达式,在进入这个分支时判断一次。在所有这些离去流中警戒条件不可以重叠,同时要覆盖所有的可能性。两个控制路径的合并用带有两个输入箭头和一个输出箭头的菱形符号来表示,对合并来说没有警戒条件。(www.xing528.com)
案例学习
◎图6-26为还书的活动图,进行条件判定,若超时条件为真,则进行罚款,否则与罚款后的控制流合并,最终更新书本信息。
图6-26 带有分支的活动图示例
简单的和具有分支的顺序转移是活动图中最常见的路径。但也会有并发的情况发生。可用同步杆(一条粗短实线)来表示并发控制流的分劈(fork)和接合(join)。分劈表示把一个单独的控制流分成两个或更多的并发控制流。一个分劈可以有一个进入转移和两个或多个离去转移,每一个离去转移表示一个独立的控制流。在一个分劈下,与每一个路径相关的活动将并行地继续,这些流可以是真实并发的,也可以是顺序但交替进行的。一个接合表示两个或多个并发控制流的同步。一个接合可以有两个或多个进入转移和一个离去转移。在接合处,并发的流取得同步;在接合后,只有一个控制流从这一点继续进行。
案例学习
◎图6-27用并发分劈和并发接合描述了进入车站候车厅前的活动图:首先到达车站,此时需要分别检查行李和车票,这两项检查是同时进行的,当两个活动都达到下一个状态后才能进行下一个活动即进入候车室。
图6-27 含有并发分劈和并发接合的活动图示例
并发接合和并发分劈应该是平衡的,即离开一个并发分劈的流的数目应该和进入与它对应的并发接合的流的数目相匹配。
4)泳道(Swimlane)
泳道即将一个活动图中的活动状态分组,每一组表示负责这些活动的业务机构,每个组称为一个泳道,用一条垂直的实线将它与其他组分开。一个泳道代表对象对活动的责任,它能清楚地表明动作在哪里(在哪个对象中)执行,或者表明一个组织的哪部分工作(哪个动作)被执行。
每个泳道在图中都有唯一的名称,可以代表现实世界的某些实体,例如公司内部的一个机构单元。每个泳道表示一个活动图的全部活动中部分活动的高层职责,并且最终可能由一个或多个类实施。在一个划分了泳道的活动图中,每个活动严格地属于一个泳道,而转移可以跨越泳道。
案例学习
◎图6-28中的活动图被泳道分成三个组:顾客、运输部和财务部,每个部门(对象)负责与各自职责有关的活动。
图6-28 含有泳道的活动图示例
5)对象流(Object Flow)
对象流是活动与对象之间的依赖关系,对象流被包含在与一个活动图相关的控制流中,表示动作使用对象或动作对对象的影响。对象流描述了一个对象值从一个动作流向另一个动作,在UML活动图中描述某个对象时,把涉及的对象放置在UML活动图中并用一个依赖关系将其连接到进行创建、修改和撤销的动作状态或活动状态上,就构成了对象流。对象流用带箭头的虚线表示。
案例学习
◎图6-29在图6-28的基础上产生,“汇款”活动将创建一个“汇款单”对象,其他的活动将使用或修改该对象。
图6-29 含有对象流的活动图示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。