UML提供如下动态模型:交互图(顺序图和协作图)、状态图、活动图。

  1. 状态图用来描述某一特定对象所有可能的状态及状态间的转移,是对类图的补充;
  2. 顺序图用来描述对象间的动态交互关系,着重体现对象间消息传递的时间顺序;
  3. 协作图(通信图)用来描述相互协作的对象的交互关系和关联关系,着重体现对象间的静态关联关系;
  4. 活动图主要用于描述用例内部的工作流程。

活动图和交互图是UML中对系统动态方面建模的两种主要形式。

  1. 交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流
  2. 活动图是一种表述过程基理、业务过程以及工作流的技术。它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。

案例:
image.pngimage.png

5.1 活动图概述

活动图采用类似于状态机的方法来表示工作的流程,描述了需要做的活动以及执行这些活动的顺序。活动图用来描述动作和动作导致对象状态改变的结果,而不考虑引发状态改变的事件。

5.1.1 目的

活动图可以用作下述目的:

  1. 描述一个操作执行过程中所完成的工作(动作),这是活动图最常见的用途。
  2. 描述对象内部的工作。
  3. 显示如何执行一组相关的动作以及这些动作如何影响它们周围的对象。
  4. 显示用例的实例如何执行动作以及如何改变对象状态。
  5. 说明一次商务活动中的人(角色)工作流组织和对象是如何工作的。

    5.1.2 活动图与流程图的区别

  6. 流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系;而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。

  7. 活动图能够表示并发活动的情形,而流程图不能。
  8. 活动图是面向对象的,而流程图是面向过程的。

    5.2 活动图的基本要素

  9. 动作结点(action node) 一个动作结点表示一步计算,是最小的行为单位,属于一种可执行结点。

  10. 控制结点(control node) 起始结点(initial node) 终止结点(final node) 分叉汇合(fork & join node) 判断合并(decision & merge—node)。
  11. 对象结点(object node) 流入和流出被调用的行为,表示对象或数据,或者表现令牌的集聚。
  12. 对象流(object flow) 由一个结点产生的数据,由其他结点使用。
  13. 控制流(control flow) 表示结点间执行的序列。
  14. 分区(partition)和泳道(swimlane) 依照各种协作方式来组织较低层次的活动,如同现实世界中的各个机构或角色各司其责。
  15. 可中断区间(region)和异常 表示控制流偏离正常执行的轨道。

    5.2.1 动作与活动

    动作 (Action)是原子性的动作或操作的执行,它不能被外部事件的转换中断。常见动作如:基本功能、行为调用、通信动作、对象处理。
    动作结点action node(原先称为activity state) 动作结点可以有转入,转入可以是对象流或者动作流。动作结点通常有一个输出的完成转换,如果有监护条件也可以有多个输出的完成转换。 在UML中,动作结点使用平滑的圆角矩形表示,名称写在矩形内部。
    活动用于表达状态机中的非原子的运行。活动的特点如下。

  16. 活动可以分解成其他子活动或动作,由于它是一组不可中断的动作或操作的组合,所以可以被中断。

  17. 活动的内部活动可以用另一个活动图来表示。
  18. 和动作不同,活动可以有入口动作和出口动作,也可以有内部转移。

虽然和动作有诸多不同,活动结点的表示图标却和动作结点相同,都是圆角矩形。稍有不同的是活动结点可以在图标中给出入口动作和出口动作等信息。

5.2.2 控制结点

起始结点:用一个实心圆表示初始结点 一个活动图只能有一个起始结点。
终止结点:用一个圆圈内加一个实心圆来表示活动终点,一个活动图可以有多个终结结点。
分叉与汇合:为了对并发的控制流建模,在UML中引入了分叉和结合的概念。用于表示将一个控制流分成两个或者多个并发运行的分支,结合用来表示并行分支在此得到同步。结合汇合了两条或两条以上的并行控制路径。
image.png
分支(判定):分支是用菱形表示的 它有一个进入转换(箭头从外指向分支符号) 一个或多个离开转换(箭头从分支符号指向外)。 而每个离开转换上都会有一个监护条件(guard condition),用来表示满足什么条件的时候执行该转换。
image.png
合并:两个或者多个控制路径在此汇合的情况。合并和分支常常成对使用,合并表示从对应分支开始的条件的行为结束。 合并汇合了两个以上的控制路径,在任何执行中每次只走一条,不同路径之间是互斥的关系。

5.2.3 (动作流)控制流

与状态图不同,活动图的转换一般都不需要特定事件的触发。一个活动执行完本状态需要完成的动作后会自发转换到另外一个活动。所有动作状态之间的转换流称之为动作流 活动图的转换也用带箭头的直线表示,箭头的方向指向转入的结点表示的活动。

5.2.4 对象结点和对象流

对象结点表示活动中输入或输出的对象。从活动指向对象结点的流或从对象结点指向活动的流称为对象流。

5.3 泳道

所谓泳道技术,是将活动用虚线分成一些纵向的域,将这些纵向的区域称之为泳道。每个区域代表一一个特定类、或者人、或者部门的责任区。 将模型中的活动按照职责组织起来通常很有用。例如,可以将一个商业组织处理的所有活动组织起来。这种分配可以通过将活动组织成用线分开的不同区域来表示。由于它们的外观的缘故,这些区域被称作泳道。
image.png

5.4 实例

5.4.1 分析流程

  1. 定义活动图范围,确定开始、结束状态。
  2. 添加活动,建模主路径。
  3. 寻找分支和并行的情况,建模扩展路径。
  4. 根据需要划分游泳道。

    5.4.2 用例图

    image.png

    5.4.3 事件流

    1.接待员输入要预约的日期
    2.系统显示该日的预约
    3.有一张合适的餐桌可以使用,接待员输入顾客的姓名和电话号码、预约的时间、用餐人数和餐桌号
    3a 没有合适的餐桌可以使用
    3a1 用例终止
    4.系统记录并显示该预约
    4a 输入的预约人数多于餐桌能容纳的人数
    4a1 系统发出一个警告信息,询问用户是否想要继续预约
    4a1a 如果回答“否”,用例将不进行预约而终止
    4a1b 如果回答“是”,预约将被输入,并附有一个警告标志

    5.4.4 绘图

    image.png