7 状态图(Stage Diagram)
7.1 概述
状态图主要用于描述对象的状态变化以确定何种行为改变了对象状态,以及对象状态变化对系统的影响。
通常只用于描述单个对象的行为。
状态图在描述单个复杂对象的行为时非常有助于我们理解一个对象的行为。
7.2 状态图元素
(1)初始状态:初始状态是状态机的起始位置,它不需要事件的触发。
(2)转移(Transitions): 表示当发生指定事件并且满足指定条件时,第一个状态中的对象将执行某些操作并进入第二个状态。
转移的五要素:
•源状态(Source State):即受转换影响的状态
•触发事件(Trigger):是转移的诱因,可以是一个信号,事件、条件变化和时间表达式。
•监护条件(Guard Condition):布尔表达式,决定是否激活转换
•动作(Effect):转换激活时的操作
•目标状态(Target State):当转换完成后对象的状态
转换类型 | 描述 | 语法 |
外部转换 | 对事件做出响应,引起状态变化或自身转换,同时引发一个特定动作,如果离开或进入状态将引发进入转换、离开转换 | 事件 ( 参数 )[ 监护条件 ]/ 动作 |
内部转换 | 对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换 | 事件 ( 参数 )[ 监护条件 ]/ 动作 |
进入转换 | 当进入某一状态时,执行相应活动 | entry/ 活动 |
退出转换 | 当离开某一状态时,执行相应活动 | exit/ 活动 |
状态(States):是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况。可以把状态图分成两个区域,上面的区域保存状态名,下面的区域保存在该状态中发生的活动。常见的三个活动是:
1)入口动作(entry):进入某一状态时执行的动作
2)动作(do):系统处于该状态是要发生的动作
3)出口动作(exit):离开某一状态是执行的动作。
状态具有以下几项特征:
子状态(sub-state):嵌套在另外一个状态中的状态称之为子状态,一个含有子状态的状态被称作组合状态(Compound States)
1)子状态以两种形式出现:顺序子状态(sequential substate)和并发子状态(concurrent substate)。
2)历史状态(History States):目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态,而不是再次从组合状态的初态开始。
延迟的事件:
延迟的事件是其处理过程被推迟的事件,它们的处理过程要到事件不被延迟的状态被激活时才会执行。当该状态被激活时,将触发该事件,同时可能导致转移(好像该事件刚刚发生)。要实施延迟的事件,需要有事件的内部队列。如果事件已发生但被列为延迟,它就会被添加到队列中。当对象进入了不会使事件延迟的状态时,将立即从该队列中取出这些事件。