ステートマシンとは何ですか? – ステートチャート
ステートマシンとは
Wikipediaでは、有限状態機械(FSM)を次のように定義しています:
任意の時間に有限個の状態のうち正確に1つになることができる抽象的な機械。 FSMは、外部からの入力に応じてある状態から別の状態に変化することができ、ある状態から別の状態への変化を遷移と呼びます。
さらに:
状態とは、ある遷移の実行を待っているシステムの状態の記述です。
ステートマシンは、このような抽象的なマシンを視覚的に表現したものでもあります。
例
ここでは、単純なステートマシンを視覚的に表現しています。
2つの状態を持つ単純なオン/オフ スイッチです。
このマシンに関するいくつかの考察
- 「オン」と「オフ」の2つの状態で構成されています。 したがって、このマシンはどの時点でも、2 つの状態のうち正確に 1 つになることができます。
- 「フリック」イベントにより、状態間の移行が行われます。
- マシンが「オン」状態になると、副次的な効果が発生します。
- マシンが「on」の状態に入ると、ライトが点灯します。
- マシンが「on」の状態を終了すると、別の副作用が発生します。
この単純なステート マシンは、何かのオン状態を制御する、真か偽かのどちらかを取ることができるブール変数に匹敵します。 5 つの独立した変数を持ち、それぞれが真または偽であるプログラムまたはソフトウェア コンポーネントは、理論的には 32 の状態 (5 の 2 乗 = 32) のいずれかになる可能性があります。
プログラムの状態をモデル化する別の方法として、ステート マシンがあります。 独立した変数を定義する代わりに、どのような状態が可能なのか、また、マシンがある状態になったとき、次にどのような状態が許されるのかを処理するために、マシンを特別に作ります。
ステート チャートとの関係
ステート マシンを理解することは、ステート チャートを理解することとほぼ同じです。 多くの意味で、ステートチャートはステート マシンの「兄貴分」であり、ステート マシンの制限をいくつか克服するために設計されています。 ステートチャートは、基本的には、どのような状態でも、より多くのマシンを階層的に含むことができるステートマシンです。
statecharts.github.io の主な目的は、ステート チャートの理解を助けることです。 ステート マシンの理解は、うれしい副次的効果です。 ステートチャートとは
抽象的なマシンとランタイム
重要な区別は、抽象的なマシン自体 (ステート マシンの描画やコードなど) と、特定の抽象的なマシンのより具体的なランタイムの実行との間で行わなければなりません。 この区別は、クラス(抽象的な定義)とオブジェクト(具体的なインスタンス化)の違いに似ています。
「ステートチャート」、「ステートマシン」、「FSM」という用語は、抽象的な形式と実行時の形式の両方を意味することが多いのですが、実行時の形式には、「ステートマシンの実行」や「ステートチャートの実行」のように、「実行」や「実行」という修飾語が付くことがあります。
抽象的なステートマシンは、有限の状態セットを定義するソフトウェア コンポーネントです。
ステートマシンを「実行」すると、この抽象的なステートマシンが実行されます。 まず最初に、ステートマシンは「初期状態」に入ります。 その後、イベントが発生するとすぐにマシンに渡されます。 イベントが発生すると、
- イベントは現在のステートのトランジションと照合されます。
- トランジションがイベントと一致した場合、そのトランジションは「発生」します。
- 遷移が「起こる」ことによって、状態が終了したり、入力されたり、関連するアクションが実行されます
- マシンは直ちに新しい状態になり、次のイベントを処理する準備ができます
Further reading
- ステートチャートとは何ですか? –
- ステートマシンの知識を基にして
- ステートマシンの例 – 単純な「オンオフ」ステートマシンを基にして、ステートチャートの概念をいくつか説明します。