天天看點

“狀态機”學習筆記

有限狀态機FSM思想廣泛應用于硬體控制電路設計,也是軟體上常用的一種處理方法(軟體上稱為FMM有限消息機)。它把複雜的控制邏輯分解成有限個穩定狀态,在每個狀态上判斷事件,變連續處理為離散數字處理,符合計算機的工作特點。

  • Async和Await異步程式設計的原理
在上面的這個簡單狀态機中,調用者不需要知道狀态機下一步要幹什麼,它隻被告知在某個時候需要調用MoveNext,具體幹什麼由狀态機的内部實作決定。
  • 技術系列之“狀态機”
與編譯原理中的狀态機不同,軟體設計領域中通用狀态機的輸入不是字元集,而是被稱作事件的結構(可以是結構體,也可以是類對象),并且特定的狀态下,針對發生的事件,不僅發生狀态改變,而且産生動作。
  • 狀态機思路在程式設計中的應用

狀态機可歸納為4個要素,即現态、條件、動作、次态。這樣的歸納,主要是出于對狀态機的内在因果關系的考慮。“現态”和“條件”是因,“動作”和“次态”是果。詳解如下:

①現态:是指目前所處的狀态。

②條件:又稱為“事件”。當一個條件被滿足,将會觸發一個動作,或者執行一次狀态的遷移。

③動作:條件滿足後執行的動作。動作執行完畢後,可以遷移到新的狀态,也可以仍舊保持原狀态。動作不是必需的,當條件滿足後,也可以不執行任何動作,直接遷移到新狀态。

④次态:條件滿足後要遷往的新狀态。“次态”是相對于“現态”而言的,“次态”一旦被激活,就轉變成新的“現态”了。

。。。

初學者往往會把某個“程式動作”當作是一種“狀态”來處理,我稱之為“僞态”。那麼如何區分“動作”和“狀态”?本匠人的心得是看二者的本質:“動作”是不穩定的,即使沒有條件的觸發,“動作”一旦執行完畢就結束了;而“狀态”是相對穩定的,如果沒有外部條件的觸發,一個狀态會一直持續下去。

  • 狀态機的兩種寫法

繼續閱讀