前回、ステート・パターンをRubyで実装してみた。
これを機に、ステート・マシンもちゃんと実装まで学んでおこうとおもう。
ステート・マシンとは
ステート・マシンとは、システムの振る舞いの仕組み。
<p>
ステートマシン図とは、それをUML記法で表したもの。
</p>
<ul class="org-ul">
<li>
<a href="https://ja.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3">有限オートマトン - Wikipedia</a>
</li>
</ul>
ステート・マシンの構成要素
ステート・マシンの構成要素は以下のとおり。
<ul class="org-ul">
<li>
状態(State) ・・・なんて定義してよいやら。
</li>
<li>
遷移(Transition)・・・ひとつの状態から別の状態へ移行すること
</li>
</ul>
<p>
遷移はさらに以下の3つに分解できる。
</p>
<ul class="org-ul">
<li>
イベント(Event) ・・・遷移のきっかけ、トリが
</li>
<li>
ガード(guard) ・・・遷移するための条件(true/false)
</li>
<li>
アクション(Action) ・・・遷移時の動作
</li>
</ul>
<p>
以下のように記述する。
</p>
<pre><code>Event[Guard]/Action
<p>
また、状態に関係する動作をアクティビティという。アクションは遷移に関係する。
</p>
<pre><code>do/Activity
UML図
以下のようなステート・マシンをRubyで実装する。
<div class="figure">
<p>
<img src="https://futurismo.biz/wp-content/uploads/wpid-rubytk_state_machine2.png" alt="rubytk_state_machine.png" />
</p></p>
</div>
<p>
前回は自分のステータスをもとに振る舞いを変更したけれども、 今回は、別プロセスの状態によって、振る舞いを変えるようにしてみる。
</p>
<div class="figure">
<p>
<img src="https://futurismo.biz/wp-content/uploads/wpid-rubytk_state_sequence2.png" alt="rubytk_state_sequence.png" />
</p></p>
</div></p>