一、狀態機要素
可以把狀態機的要素分為4個要素,即:現態、條件、動作、次態。
“現態”和“條件”是因,“動作”和“次態”是果。
(1)現態:是指當前所處狀態;
(2)條件:又稱為“事件”。當條件被滿足時,將會觸發一個動作,或者執行一次狀態的遷移。
(3)動作:條件滿足后執行的動作。動作不是必須的,當條件滿足后,也可以不執行任何動作,直接遷移到新狀態。
(4)次態:條件滿足后要遷移往的新狀態。“次態”是相對於“現態”而言的,“次態”一旦被激活,就轉變成新的“現態”了。
二、狀態遷移圖(STD)
(1)狀態框:用方框表示狀態,包括所謂的“現態”和“次態”;
(2)條件及遷移箭頭:用箭頭表示狀態遷移的方向,並在該箭頭上標注觸發條件;
(3)節點圓圈:當多個箭頭指向一個狀態時,可以用節點符號(小圓圈)連接匯總;
(4)動作框:用橢圓框表示;
(5)附加條件判斷框:用六角菱形框表示;
三、狀態遷移表
四、用狀態機思路實現一個時鍾程序
首先我們畫出他的狀態遷移圖:
然后我們畫出狀態遷移表:
五、狀態機應用注意事項:
注意使用狀態機的時候不要出現兩種錯誤:1、“偽態”2、“漏態”
(1)“偽態”:把某個“程序動作”當成一種“狀態”來處理。
(2)“漏態”:在狀態划分時漏掉一些狀態。
PS:
區分狀態和偽態:(看兩者的本質)
“動作”是不穩定的,即使沒有條件的觸發,“動作”一旦執行完畢就結束了;
“狀態”是相對穩定的,如果沒有外部條件的觸發,一個狀態會一直持續下去。
六、更復雜的狀態機
前面介紹的是一種簡單的狀態結構。它只有一級,並且只有一維,它的結構圖如下所示:
如果有必要,我們可以建立更復雜的狀態機模型。如:
1、多級狀態結構。
狀態機可以是多級的。在分層的多級狀態機系統里面,一個“父狀態”下可以划分多個“子狀態”,這些子狀態共同擁有上級父狀態的某些共性,同時又各自擁有自己的一些個性。
2、多維狀態結構。
狀態機也可以是多維的。從不同的角度對系統進行狀態的划分,這些狀態的某些特性是交叉的。比如,在按照按鍵和顯示划分狀態的同時,又按照系統的工作進程做出另一種狀態划分。這兩種狀態划分同時存在,相互交叉。從而構成了二維的狀態結構空間。
說明一下,每一維的狀態都需要用一個狀態變量(寄存器)來表示。
簡單的才是最有效的!!







