UML小讲02.活动图

356 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

组成元素

活动状态、动作状态、转移、判定、开始和结束状态。

活动状态

活动也称为动作状态(Action State)是活动图的核心符号,它表示工作流过程中命令的执行或活动的进行。与等待事件发生的一般等待状态不同,活动状态用于等待计算处理工作的完成。当活动完成后,执行流程转入到活动图的下一个活动。

动作状态

对象的动作状态是活动图的最小单位的构造块,是指执行原子的、不可中断的动作,并在此动作完成后通过完成转换转向另一个状态的状态。在UML中动作状态使用平滑的圆角矩形表示,动作状态所表示的动作写在矩形内部。

转移

一个活动图有很多动作或者活动状态,活动图通常开始于初始状态,然后自动转换到活动图的第一个动作状态,一旦该状态的动作完成后,控制就会不加延迟地转换到下一个动作状态或者活动状态。所有活动之间的转换称为转移。转移不断重复进行,直到碰到一个分支或者终止状态为止。

判定

  • 一个活动最终总是要到达某一点,如果一个活动可能引发两个以上不同的路径,并且这些路径是互斥的,此时就需要使用判定来实现。
  • 在UML中判定有两种表示方式:一种是从一个活动直接引出可能的多条路径。另一种方式是将活动转移引到一个菱形图标,然后从这个菱形的图标中再引出可能的路径。

开始和结束状态

  • 状态通常使用一个表示系统当前状态的词或短语来标识。状态在活动图中为用户说明转折点的转移,或者用来标记工作流中以后的条件。
  • 前面学习了活动状态和动作状态,除了他们UML还提供了两种特殊的状态,即开始状态和结束状态。开始状态是以实心黑点表示,结束状态以带有圆圈的黑点表示。

控制结点

控制结点是一种特殊的活动结点,用于在动作结点或对象之间协调流,包括分支、合并、分叉与汇合等。

分支与合并

当想根据不同条件执行不同分支的动作序列时,可以使用判定。我们知道UML使用菱形作为判定的标记符,它除了标记判断外还能表示多条控制流的合并。本节将详细讲解有关判定进行分支和合并的相关知识。

image.png 分叉和汇合与转移密不可分。因为分叉是用于将一个控制流分为两个或多个并发运行的分支,它可以用来描述并发线程,每个分叉可以有一个输入转移和两个或多个输出转移,每个转移都可以是独立的控制流。

其他元素

除了前面讲到的活动图元素标识符外,活动图还具有其他一些元素,像事件和触发器、泳道、对象流、发送信号动作、接收事件动作以及可中断区间等,它们也是活动图中不可缺少的标记符。这些元素与基本元素一起构建了活动图的丰富内容,综合使用它们能增强绘图技术,丰富活动图表达能力。

事件和触发器

事件(Event)和触发器(Trigger)的用法和控制点相似,区别是它们不是通过表达式控制工作流,而是被触发来把控制流移到对应的方向。事件非常类似于对方法的调用,它是动作发生的指示符,可以包含一个或多个参数,参数放在事件名后的括号中。

image.png

泳道

泳道将活动图划分为若干组,每一组指定给负责这组活动的业务组织,即对象。在活动图中泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。在包含泳道的活动图中每个活动只能明确地属于一个泳道。每个泳道具有一个与其他泳道不同的名字。泳道间的排列次序在语义上没有重要的意义,但可能会表现现实系统里的某种关系。

image.png

对象流

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

image.png

发送信号动作

发送信号动作是一种特殊的动作,它表示从输入信息创建一个信号实例,然后发送到目标对象。发送信号动作可能触发状态机的转换或者活动的执行。在发送信号动作时可以包含一组带有值的参数。由于信号是一种异步消息,所以发送方立即继续执行,所有的响应都将被忽略,并未返回给发送方。

image.png

接收事件动作

一个接收事件动作至少关联一个触发器,每个触发器都确定了一种接收的事件类型,事件的类型可以是异步调用事件、改变事件、信号时间和时间事件。一个接收事件的动作可以接收多种类型的事件。

可中断区间

可中断活动区间是一种特殊的活动分组,当发生某种事件时,在一个活动中把某一范围中的所有控制流都撤消。具体来说,一个可中断区间包含了多个活动结点,而且有一个或者多条流作为该区间的中断退出区间。当一个控制流沿着其中一条流退出时,该区间中的所有其他流和活动都终止。

image.png

异常

  • 一个异常表示发生某种不正常的情况而停止了不正常的执行过程。在如下情况下可能发生异常:
  • 可能是由于底层执行的行为错误而引起的。例如,访问数组的下标超界,除数为零等情况
  • 可能由一个引发异常的动作而显式引起的。UML 2中有一种特殊的动作称为“引发异常”,它的执行将引发指定类型的异常,这类似于编程语言中使用throw语句抛出的异常

image.png

活动图的应用

在本节前面详细介绍了活动图中各个元素的表示方式,并给出了简单示例。本节将以图书管理系统中的借书操作为例进行分析,并逐步实现其活动图,让读者了解绘制活动图的基本步骤和技术要领。

建模步骤

在系统建模过程上,活动图能够被附加到任何建模元素以描述其行为,这些元素包含用例、类、接口、组件、节点和操作等等。现实中的软件系统一般都包含很多类,以及复杂的业务过程,这里的业务过程指工作流。系统分析析可以用活动图来对这些工作流建模以此重点描述这些工作流;也可以用活动图对操作建模,用以重点描述系统的流程。

借书操作中的活动图

建模活动图时,首先要确定对谁进行建模。在图书馆中,图书管理员用到最多的应该就是借书操作和还书操作。这里以借书操作为例,来建模借书用例的活动图。

image.png

状态图和活动图的比较

状态图和活动图都是用于对系统的动态行为建模。状态机是展示状态与状态转换的图,通常一个状态机依附于一个类,并且描述这个系统实例对接收到的事物的反应。状态机有两种可视化方式,分别是状态图和活动图。