9.1 状态图的基础知识

状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作,如计算机、各种客户端软件、Web上的各种交互页面都是状态机。
状态图是众多开发人员都十分熟悉甚至经常使用的工具,它描述了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移。

9.2 状态图组成

在UML中状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。 状态的转换由事件触发,状态和状态之间由转换箭头连接。 每一个状态图都有一初始状态(实心圆),用来表示状态机的开始,还有一个终止状态(半实心圆),用来表示状态机的终止。
在UML中状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。 状态的转换由事件触发,状态和状态之间由转换箭头连接。 每一个状态图都有一初始状态(实心圆),用来表示状态机的开始,还有一个终止状态(半实心圆),用来表示状态机的终止。
最为核心的元素无外乎是两个:一个是用圆角矩形表示的状态(初态和终态例外);另一个则是在状态之间的、包含一些文字描述的有向箭头线,这些箭头线称为转换。
image.png
基本状态图主要由元素状态、转换、初始状态、终止状态等组成。
image.png

9.2.1 状态、状态表示法

状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况,一个状态通常包括名称、入口/出口动作、内部转换、子状态(嵌套状态)和延迟事件等五个部分组成。
image.png

9.2.2 初始状态(initial state)

每个状态图都应该有一个初始状态,它代表状态图的起始位置。在UML中一个状态图只能有一个初始状态,用一个实心的圆表示。

9.2.3 终止状态(final state)

终止状态是一个状态图的终点。在UML中终止状态用一个含有实心圆的空心圆表示。

9.2.4 转换和转换的五要素

源状态( Source State ) :即受转换影响的状态;
目标状态( Target State ) :当转换完成后对象的状态 ;
触发事件( Event Trigger ) :用来为转换定义一个事件,包括调用、改变、信号、时间四类事件;
监护条件( Guard Condition) :布尔表达式,决定是否激活转换;
动作( Action):转换激活时的操作。
image.png
与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作 而与状态on相关的转换也有两个,如果“水开了”就执行turnOff,关掉开关;如果烧坏了,就进入了终态了。
image.png

转换类型 描述 语法
①外部转换 对事件做出响应,引起状态变化或自身转换,同时引发一个特定动作,如果离开或进入状态将引发进入转换、离开转换 事件(参数)[监护条件]/动作
②内部转换 对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换 同①
③进入转换 当进入某一状态时,执行相应活动 entry/动作
④退出转换 当离开某一状态时,执行相应活动 exit/动作
⑤自转换 一种特殊的外部转换,起始状态和终止状态为同一状态 同①

image.png

9.2.5 判定与复合转换

判定用空心小菱形表示。工作流在此处按监护条件的取值而发生分支,各个分支组成复合转换。

9.2.6 状态嵌套和历史状态

  1. 状态嵌套:状态分为筒单状态(Simple State)和组成状态(Composite State)。 简单状态是在语义上不可分解的、对象保持一定属性值的状况,简单状态不包含其他状态;组成(复合)状态是内部嵌套子状态的状态,在组成状态的嵌套状态图部分包含的就是此状态的子状态。

image.pngimage.png
image.png
image.png

  1. 历史状态:组成状态可能包含历史状态(History State),历史状态本身是个伪状态,用来说明组成状态曾经有的子状态。历史状态代表上次离开组成状态时的最后一个活动子状态,它用一个包含字母H的小圆圈表示。

image.png
图中的含义是:当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物车或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。

9.3 并发状态图(不做要求)

9.4 状态图设计实例

image.png
image.png

9.5 绘制状态机图

image.png
image.png

9.6 活动图与状态图

1.活动图与状态图的相同点
都是对系统的动态行为建模。
2.活动图与状态图的区别:
①描述对象不同

  1. **状态图:**描述对象状态及状态之间的转移;
  2. **活动图:**描述从活动到活动的控制流。

②使用场合不同

  1. **状态图:**描述对象在其生命期中的行为状态变化;
  2. **活动图:**描述过程的流程变化。