一、 状态图
状态图主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。
一般用状态机对一个对象的生命周期建模,重点在与描述状态图的控制流。
二、 相关概念
-
状态(State)
状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态将发生变化。状态用圆角矩形表示。
-
初态和终态(Initial and final)
初态用实心圆点表示,终态用圆形内嵌圆点表示。
-
转移(Transition)
两个状态之间的一种关系,表示对象将在源状态(Source State)中执行一定的动作,并在某个特定事件发生而且某个特定的警界条件满足时进入目标状态(Target State)。
一个状态到下一个状态的转移表示为带箭头实线。
转移可以有一个“Trigger”触发器,一个“Guard”监护条件和一个“effect”效果。如下所示:触发器(事件event)
转移的诱因,可以是一个信号,事件、条件变化(a change in some condition)和时间表达式。监护条件
当警界条件满足时,事件才会引发转移(Transition)。效果
对象状态转移后的效果 -
状态动作(Actions)
状态动作是一个可执行的原子操作(动作是不可中断的,其执行时间是可忽略不计的) 在上例中,对象状态转移后的结果显示在转移线上,如果目标状态有许多转移,而且每个转移有相同的结果,这时把转移后的结果(Effect)展示在目标状态中(Target State)更好一些,可以定义进入动作(Entry Action )和退出动作(Exit Action),如下图:
-
自转移
状态可以有返回自身状态的转移,称之为自身转移(Self-Transitions) 根据状态转移的触发器和条件,进行自身转移。
-
复合状态
嵌套在另外一个状态中的状态称之为子状态(sub-state),一个含有子状态的状态被称作组合状态(Compound States). 如下图,【Check PIN】是组合状态,【Enter PIN】是子状态。
-
入口点
如下图所示,由于一些原因并不会执行初始化,而是直接通过一个节点进入状态【Ready】,则此节点称之为入口点(Entry Point)。
-
出口点
同理,有入口点,当然也有出口点
-
伪状态
9.1 选择
选择伪状态显示为菱形,有一个转移输入,两个或多个输出。下图显示不管到达哪一个状态,经过选择伪状态后的去向,取决于在伪状态中执行时所选择的消息格式。
9.2 连接
连接伪状态用来将多个状态转移链接在一起。
9.3 终止
进入终止伪状态是指状态机生命线已经终止。终止伪状态表示为叉号。
-
历史
历史状态是一个伪状态(Pseudostate),其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态(如Spinning),而不是再次从组合状态的初态开始。
-
并发区
状态图可以分为区域,而区域又包括退出或者当前执行的子状态。说明组合状态在某一时刻可以同时达到多个子状态。如下图刹车系统,同时进入前刹车【Applying Front Brakes】状态和后刹车【Applying Rear Brakes】状态。
三、 建模步骤
① 找出适合用模型描述其行为的类。
② 确定对象可能存在的状态。
③ 确定引起状态转换的事件。
④ 确定转换进行时对象执行的相应动作。
⑤ 对建模的结果进行相应的精化和细化。
四、 图例
采样点位状态变更过程:
- 初始状态为待采样,如果点位采集到了样品,则变更点位状态到已采样。
- 点位存在无法采样情况,可以取消采样,变更状态到无效。
- 点位存在当前不可以采样,可以变更状态到待补采。
- 采集的样品交接完毕,点位变更状态到已完成,采样活动结束。