状态图
展现了一个状态机,由状态、转换、事件和活动组成
它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。
适用场景
当对系统、类或用例的动态方面建模时,通常是对 反应型对象(有多种状态) 建模。
书中例子
例子
解释
构成
- 起始状态:实心圆,只能有一个初态
- 终止状态:实心圆外套一个圆圈。可以有一个或多个,也可以没有终态
- 一般状态:圆角矩形
- 事件:
/
前面表示事件 - 动作:
/
后面表示动作 - 监护条件:
[ ]
中的判断条件 - 转换(转移):从一个状态到另一个状态,如:
off
转换到on
转换
是 两个状态间 的一种关系,表示对象将在当前状态中 执行动作,并在 事件发生 或 条件满足 时进入后继状态。
格式:事件(参数)【条件】/动作
(不是都有)
事件类型
信号事件:对象之间发送信号和接收信号实现通信,如:鼠标
调用事件:一个对象请求调用另一个对象的操作,如:方法调用
变换事件:
when
后面接布尔表达式
,如when(A>100)
时间事件:到达某一时间或经过某一个时间段,用
when
和after
表示
状态组成部分
- 状态名(name)
- 进入/退出动作(entry action/exit action)
- 内部转移(internal transition)
- 子状态(substate)
- 延迟事件(deferred event)
组合状态
状态还有 子状态 组成
顺序子状态(串行)
多个子状态之间是互斥的,不能同时存在。整体状态完成,需要A1和A2都完成
如下图:
状态A
为组合状态,其中 A1
和 A2
为 A
的子状态:
并发子状态(并行)
并发子状态某个时刻可以 同时达到多个子状态,并且状态内部可以 并发进行。
如下图:
称该A状态为并发状态,其中A1、A2、A3和A4都为其并发子状态。
题
如下所示的UML状态图中,()时,不一定会离开状态B。
A、状态B中的两个结束状态均达到
B、在当前状态为B2时,事件e2发生
C、事件e2发生
D、事件e1发生
分析
A错误:一定离开B,转移到 C2
B错误:状态B 转移 到 状态 C3
C正确:如果没处于 B2 状态,发生事件 e2,也不会离开B
D错误:e1发生,状态转移到 C1