分类:
本文讲述层次状态机实现形式中的行为继承。从行为继承与类继承之间的OO类
相似来看,一个成功的层次状态机应该能够模拟下列属于C对象模型。使用和维护简单应允许转态机拓扑容易改变,不应要求转换连接的人工代码,所需要的修
改限制在代码的一个地方。提供好的运行时间效率和小的存储。
遵守C中的“零额外开销”原则。为了满足上面的要求,层次状态机的实现着重于下面的主要元素:完全支持行为继承的层次关系用状态进入和退出动作实现有保证得初始化和清除通过类继承支持规定的状态模型1基本要素
1状态:在层次状态的情形下,状态处理器必须返回朝状态,这导致层次
状态处理特征标记的递归定义。构造这种特征标记在C是不可能的,于是定义下面宏来近似:
typedefvoidQPseudoStateQEVENTco
stpEve
ttypedefQPseudoStateQStateQEVENTco
stpEve
t
2进入退出动作和初始状态:这些元素是状态专有的特征,在转态中他们被定义,而特别的是与到达状态所进过的路径无关。保留信号的转态定义为:
typedefe
umtagQSIG
Q_EMPTY_SIG1Q_INIT_SIGQ_ENTRY_SIGQ_EXIT_SIGQ_USER_SIGQSIG
f状态处理机可以用一般的switch语句规定适当的用例处理这些信号,可以自由的执行相应信号的操作。3状态转换:状态处理机用Q_TRAN实现状态转换,并且在原状态的上下文中执行动作,即:改变状态之前调用Q_TRAN(和UML规定不一致)。
defi
eQ_TRANtarget_Q_Tra
DycQStatetarget_
4Top状态和初始伪状态:每个层次状态机都有一个Top状态,包括整个状态的所有其它元素。Top状态没有超状态,用户也不能覆盖;Top状态的唯一目的是提供状态层次的最高的根,使最高处理器能返回TopTop状态唯一能订制的是初始化。初始化伪状态处理机仅规定初始化转换,必须指明被窃套的Top状态的状态机的缺省状态。
2实现代码:1头文件代码:
if
defSTATE_INHERIT_Hdefi
eSTATE_INHERIT_H
typedefu
sig
edshortQSIGDefi
ethesig
alofstatemachi
ee
um
Q_EMPTY_SIG0Q_INIT_SIG1
fQ_ENTRY_SIGQ_EXIT_SIGQ_USER_SIG
Defi
ethesig
alofstatemachi
etypedefstructtagQEVENT
QSIGsigu
sig
edcharpEve
t1u
sig
edcharpEve
t2TODOaddfieldstotheeve
tQEVENT
defi
estatedatatypetypedefvoidQPseudoStateQEVENTco
stpEve
ttypedefQPseudoStateQStateQEVENTco
stpEve
ttypedefQPseudoStateQSTATE
defi
eQ_TRIGGERstatesigQStatestateQEVENTpkgStdEvtsig
defi
eatra
satio
thatdo
tcha
gethestatejusttreatthepEve
twiththetargetstatethisisusedbyco
curre
tstatedefi
eQ_INITtarget_I
it_QStatetarget_r