ホームに戻る
出典 :
有限オートマトン - Wikipedia 状態遷移図 - Wikipedia
関連 :
イベント駆動型プログラミング
目次 :

有限状態機械(FSM : finite state machine)とは

有限個の状態と、それらの状態間の遷移を抽象化した振舞いのモデル。「有限オートマトン」と同義。単に「状態機械」、「オートマトン」と呼ばれることもある。
処理の順序が重要な意味を持つ 、または 同一のメッセージを受理した場合でも内部状態によって処理を切り替える必要がある システムにおいて、実行順序を制御したり、状態ごとの振舞いを体系化するために用いられる。
特に、 系外からのメッセージをトリガとするイベント駆動型のシステム において、「外部の系」は自身の制御下に無く、
系外からのメッセージが決められた順序、決められたタイミングで到達するとは限らないため、すべての状態とすべてのメッセージの組み合わせを考慮する必要がある。
系外からは遷移契機となるメッセージのみを受け取り、状態遷移は系内で閉じる(系外からは状態を直接操作させない)ことが重要。
これにより、状態の管理を一元化でき、状態の不整合を防ぐことができる。

FSMの表現

状態遷移図

画像
各状態の遷移順序、遷移契機を把握するのに適しているが、遷移時の処理などを網羅できないため、状態遷移表で補足する必要がある。

状態遷移表

画像
とり得るすべての状態と、発生し得るすべてのイベントに 遷移先状態(次の状態)付随処理 を関連付ける。
各マスは「 ある状態においてあるイベントが発生した場合に、対応する処理(付随処理)を実行した上で対応する状態(遷移先状態)に遷移する 」ことを表しており、
例えば状態S0においてイベントE0が発生した場合は、付随処理*1を実行した後、状態S1に遷移する。
ここで、「イベントを受けたことで処理を行うが、状態は遷移しない」または「状態遷移のみで、付随処理を行わない」場合は、遷移先状態または付随処理無しであることを明記する(表中の「-」)。
「状態遷移も付随処理も行わない( = 何もしない)」場合は「イベントを無視する」を意味する"EI"を記入する。
また、ある状態において(正常な条件下では)発生し得ないイベントに関しては、"CO"を記入する。これは「発生し得ない( = 発生してはならない)イベントが発生した場合」を意味するため、エラー処理を実装することが望ましい。

FSMの実装例

特に状態・イベントの総数が増加した場合に、switch - caseの組み合わせで表現するとコードが煩雑となり、可読性・整備性が低下するため好ましくない。
状態遷移表をそのままジャンプテーブルとして実装する と表記が簡潔となるとともに、条件分岐を伴わないため高速に処理できる。
また、系外から受け取ったイベントは、キューイングするなどで、取りこぼしが発生しないようにする。
画像

ケーススタディ