• 沒有找到結果。

针对每一个业务用例,整理出其业务流程。业务流程可以用两种方式表达:顺序图或活 动图。两种方式各有利弊。顺序图可以很好地表达各个业务对象之间的关系,有助于准确定位 用户对系统的功能需求从而获得系统业务用例。 但对于流程分支关系表达的不够清楚。 活动图 可以有效地将业务流程的各种分支准确地表达出来, 但在表达对象关系方面不如顺序图。 本章 主要介绍活动图,顺序图请参看第 5 章。

活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动。业务用例工 作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作。 业务用例由一 系列活动组成, 它们共同为业务主角生成某些工件。 工作流程通常包括一个基本工作流程和一 个或多个备选工作流程。工作流程的结构使用活动图来进行说明。活动状态代表了一个活动、

一个工作流步骤或一个操作的执行。 活动图描述了一组顺序的或并发的活动。 活动图很像流程 图,它显示出工作步骤,判定点和分支。可用于表达一个对象的操作和一个业务过程。

活动图是 UML 用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现 从一个活动到另一个活动的控制流。 活动图在本质上是一种流程图。 活动图着重表现从一个活 动到另一个活动的控制流,是内部处理驱动的流程。 

3.3.1 活动图的符号 

UML 活动图中包含的图形符号有:活动状态(Activity)、动作状态(Actions)、动作状态 约束(Action Constraints)、动作流(Control Flow)、开始结点(Initial Node)、终止结点(Final  Node)、 对象 (Object)、 数据存储对象 (DataStore)、 对象流 (Object Flows)、 分支与合并 (Decision  and Merge Nodes)、分叉与汇合(Fork and Join Nodes)、异常处理(Exception Handler)、活动 中断区域(Interruptible Activity Region)和泳道(Partition) ,如图 3.14 所示。

图 3.14  活动图的基本符号 

3.3.2 活动图的基本概念  1.动作状态

动作状态是指原子的、不可中断的动作,并在此动作完成后通过完成转换转向另一个状 态。 它与活动状态有些相似, 但是它们是原子活动并且当它们处于活动状态时不允许发生转换。

活动名

起始活动 结束活动 活动 迁移 并发分劈 并发接合

条件判断 情 况 

泳道 条件 约束 

:waterTank  [full] 

对象流

情况 A

动作状态有如下特点:

(1)动作状态是原子的,它是构造 UML 活动图的最小单位。

(2)动作状态是不可中断的。

(3)动作状态是瞬时的行为。

(4)动作状态可以有入转换,入转换既可以是动作流,也可以是对象流。动作状态至少 有一条出转换,这条转换以内部的完成为起点,与外部事件无关。

(5)动作状态与状态图中的状态不同,它不能有入口动作和出口动作,更不能有内部 转移。

(6)在一张 UML 活动图中,动作状态允许多处出现。 

UML 中动作状态用平滑的圆角矩形表示。 

2.活动状态

活动图包含活动状态。活动状态表示过程中命令的执行或工作流程中活动的进行。与等 待某一个事件发生的一般等待状态不同,活动状态等待计算处理工作的完成。当活动完成后,

执行流程转入到活动图中的下一个活动状态。 当一个活动的前导活动完成时, 活动图中的完成 转换被激发。活动状态通常没有明确表示出引起活动转换的事件,当转换出现闭包循环时,活 动状态会异常终止。活动状态用于表达状态机中的非原子的运行,并能够进一步被分解,它们 的活动可以由其他的活动图表示。而且,活动状态不是原子的,也就是说它们可以被中断。可 以把活动状态看成是一个组合, 它的控制流由其他的活动状态和动作状态组成, 如工资报表申 报审批可以看做是一个活动状态,然后可分解成报表生成、报表提交、报表审批、报表发布四 个动作状态。活动图的特点如下:

(1)活动状态可以分解成其他子活动或者动作状态。

(2)活动状态的内部活动可以用另一个 UML 活动图来表示。

(3)和动作状态不同,活动状态可以有入口动作和出口动作,也可以有内部转移。

(4)动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是 一个动作状态。 

UML 中活动状态和动作状态的图标相同,但是活动状态可以在图标中给出入口动作和出 口动作等信息。 

3.分叉控制

活动图可以包含并发线程的分叉控制。对象在运行时可能会存在两个或多个并发运行的 控制流,为了对并发的控制流建模,UML 中引入了分叉与汇合的概念。分叉用于将动作流分 为两个或多个并发运行的分支, 而汇合则用于同步这些并发分支, 以达到共同完成一项事务的 目的。活动图不仅能够表达顺序流程控制还能够表达并发流程控制,如果排除了这一点,活动 图很像一个传统的流程图。 

4.泳道

泳道将 UML 活动图中的活动划分为若干组, 并把每一组指定给负责这组活动的业务组织,

即对象。在 UML 活动图中,泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些 对象进行的。 这种分配可以通过将活动组织成用线分开的不同区域来表示。 在包含泳道的 UML  活动图中,每个活动只能明确地属于一个泳道。

泳道是用垂直实线绘出,由于它们的外观的缘故,这些区域被称作泳道。在泳道的上方 可以给出泳道的名字或对象的名字,该对象负责泳道内的全部活动。泳道没有顺序,不同泳道

中的活动既可以顺序进行也可以并发进行, 动作流和对象流允许穿越分隔线。 每条泳道代表整 个工作流程的某个部分的职责, 该职责由组织的某个部门来执行。 泳道最终可以由组织单元或 者业务对象模型中的一组类来实施。

泳道之间的排序并不会影响语义。每个活动状态都指派了一条泳道,而转移则可能跨越 数条泳道。 

5.对象流

对象流是动作状态或者活动状态与对象之间的依赖关系,表示动作使用对象或动作对对 象的影响。用 UML 活动图描述某个对象时,可以把涉及到的对象放置在 UML 活动图中并用 一个依赖将其连接到进行创建、 修改和撤销的动作状态或者活动状态上, 对象的这种使用方法 就构成了对象流。

对象流中的对象有以下特点:

(1)一个对象可以由多个动作操作。

(2)一个动作输出的对象可以作为另一个动作输入的对象。

(3)在  UML 活动图中,同一个对象可以多次出现,它的每一次出现表明该对象正处于 对象生存期的不同时间点。

对象流用带有箭头的虚线表示。如果箭头是从动作状态出发指向对象,则表示动作对对 象施加了一定的影响。施加的影响包括创建、修改和撤销等。如果箭头从对象指向动作状态,

则表示该动作使用对象流所指向的对象。 对象流状态表示活动中输入或输出的对象。 如果活动 有多个输出值或后继控制流,那么箭头背向分叉符号。同样,多输入箭头指向结合符号,对象 结点和可中断的区域等用得少。 

6.活动的分解

一个活动可以分为若干个动作或子活动, 这些动作和子活动本身又可以组成一个 UML 活 动图。 不含内嵌活动或动作的活动称之为简单活动, 嵌套了若干活动或动作的活动称为组合活 动。组合活动有自己的名字和相应的子 UML 活动图。 

3.3.3 活动图的构建

要创建一个 UML 活动图,需要反复执行下列步骤。

(1)标识需要活动图的用例。一个系统用例模型包含多幅用例图,每幅图又包含多个用 例,一般情况下,不需要对每个用例绘制活动图,只有当实现该用例的步骤繁杂或者有特殊需 要的时候才会画它。因此,要首先确定建模的内容,即要对哪个用例建立活动图。在“进销存 管理系统”中, “销售合同”用例和“核对付款单”用例需要画出活动图。

(2)建模每一个用例的主路径。在创建用例的活动图时,需要先确定该用例一条明确的 执行工作流程,建立活动图的主路径,然后以该路径为主线进行补充、扩展和完善。在“销售 合同”用例中,销售合同从签订到履约的整个过程组成了该活动图的基本执行轨迹。

(3)建模每一个用例的从路径。首先根据主路径分析其他可能出现的工作流的情况,这 些可能是活动图中还没有建模的其他活动,可能是处理错误,或者是执行其他的活动。然后对 不同进程中并发执行的活动进行处理。 “销售合同”中的“核对货物清单”和“核对付款单”

就是 2 个从路径。

(4)添加泳道来标识活动的事务分区。泳道是将活动用线条分成一些纵向的矩形,这些 矩形称为泳道。每个矩形属于一个特定的对象或部门(子系统)责任区。使用泳道可以把活动

按照功能或所属对象的不同进行组织。 属于同一个对象的活动都放在同一个泳道内, 对象或子 系统的名字放在泳道的顶部。 “销售合同”涉及到“仓库管理” 、 “合同管理”和“财务管理”

三类功能,所以划分为不同的泳道,便于对“销售合同”用例进行详细的分析。销售管理中的

“销售合同”用例的活动图如图 3.15 所示。

图 3.15  销售合同从签订到履约的活动图

(5)改进高层的活动。对于一个复杂的系统,需要将描述系统不同部分的活动图按照结 构层次关系进行排列。在一个活动图中,其中的一些活动可以分解为若干个子活动或动作,这

(5)改进高层的活动。对于一个复杂的系统,需要将描述系统不同部分的活动图按照结 构层次关系进行排列。在一个活动图中,其中的一些活动可以分解为若干个子活动或动作,这

相關文件