分類:本文講述層次狀態機實現形式中的行為繼承。從行為繼承與類繼承之間的OO類相似來看,一個成功的層次狀態機應該能夠模擬下列屬于C++對象模型。2使用和維護簡單2應允許轉態機拓撲容易改變,不應要求轉換連接的人工代碼,所需要的修改限制在代碼的一個地方。2提供好的運行-時間效率和小的存儲。2遵守C++中的“零額外開銷”原則。為了滿足上面的要求,層次狀態機的實現著重于下面的主要元素:2完全支持行為繼承的層次關系2用狀態進入和退出動作實現有保證得初始化和清除2通過類繼承支持規定的狀態模型1.基本要素(1)狀態:在層次狀態的情形下,狀態處理器必須返回朝狀態,這導致層次狀態處理特征標記的遞歸定義。構造這種特征標記在C++是不可能的,于是定義下面宏來近似:(*)(*);(*)(*);(2)進入/退出動作和初始狀態:這些元素是狀態專有的特征,在轉態中他們被定義,而特別的是與到達狀態所進過的路徑無關。保留信號的轉態定義為:{=1,,,,,}QSIG;狀態處理機可以用一般的語句規定適當的用例處理這些信號,可以自由的執行相應信號的操作。
(3)狀態轉換:狀態處理機用實現狀態轉換,并且在原狀態的上下文中執行動作,即:改變狀態之前調用(和UML規定不一致)。#()(()())(4)Top狀態和初始偽狀態:每個層次狀態機都有一個Top狀態,包括整個狀態的所有其它元素。Top狀態沒有超狀態,用戶也不能覆蓋;Top狀態的唯一目的是提供狀態層次的最高的根,使最高處理器能返回Top;Top狀態唯一能訂制的是初始化。初始化偽狀態處理機僅規定初始化轉換,必須指明被竊套的Top狀態的狀態機的缺省狀態。2.實現代碼:(1)頭文件代碼:#H#tQSIG;//{=0狀態機c語言編程,=1狀態機c語言編程,,,};//T{;*;*;//TODO:};//(*)(*);(*)(*);STATE;#(state,sig)\()(*(state))((*)&[sig])//tdon',//.//#()Init_(()());#()(()());();();(*pQevt);(*pQevt);();#endif/