LoginSignup
2
4

More than 5 years have passed since last update.

[状態マシン図] 終了状態 (final state)

Last updated at Posted at 2014-08-11

黒丸が開始疑似状態、黒二重丸が終了状態である。

final_state1.png

これはプリンタの状態マシン図である。この図から以下のことが読み取れる

  1. 状態マシンがスタートすると、電源ON状態になり、電源LED点灯したあと、待機中になる。
  2. 待機中のときに、印刷要求が起きると、印刷中になる。
  3. 印刷中になると、「印刷する」を開始し、それが終了すると、自動的に待機中に戻る。
  4. 電源ON状態ではいつでも、電源OFF要求が起きると、電源LED消灯したあと、終了状態に遷移する。
  5. 電源OFF要求が起きると、待機中であれば、直ちに、終了状態に遷移する。
  6. 電源OFF要求が起きると、印刷中であれば、「印刷する」を直ちに中断して、終了状態に遷移する。印刷の終了を待つことはない。

UMLでは、終了状態は以下の特徴を持つと決められている。

  1. 終了状態を起点とする遷移は設定することができない。
  2. 入場時アクション、退場時アクション、doアクティビティを設定することができない。
  3. 内部遷移を設定することができない。

次に、上の状態マシンを拡張して、印刷中状態に、サブ状態を設定し、その領域に3つの状態を追加してみよう。

final_state2.png

印刷中のサブ状態には、領域が1つあって、その領域には終了状態がある。領域に終了状態があるときは、そこからどこにも遷移しない、という意味ではなく、 その領域が終了した、という意味に変わる。印刷中状態には領域が1つしかないので、その領域が終了したら、印刷中状態が終了したことを意味する。そうする と、ヌル遷移をたどって、待機中に遷移する。

一方、電源ON状態であれば、いつでも、電源OFF要求が有効であり、最上位の終了状態に遷移する。そこに遷移すると、そこからはもう、どこへも遷移できない。

整理すると、

  1. 最上位で、終了状態に遷移すると、もうどこにも遷移できない。
  2. 状態がサブ状態を持ち、そのサブ状態が領域を持っていて、そこに終了状態がある場合は、その終了状態に遷移すると、その領域が終了したことを意味する。
  3. 状態のもつすべての領域が終了したら、その状態が終了したことになり、その状態を起点とするヌル遷移が発火して、その状態を抜けてくる。

印刷中状態を起点とするヌル遷移があるが、これは、印刷中に入場したら、ただちに退場してくる、という意味ではなく、印刷中の終了状態に遷移するまで、ヌル遷移が発火しないことを意味する。

つまり、終了状態が、最上位にあるのか、領域にあるのかで、振る舞いが変わる。

次に、UMLの定義を確認しよう。UML2.0 State Machine (状態機械) モデルでは、節点には疑似状態と状態があり、最終状態(終了状態)は状態である。最終状態(終了状態)は疑似状態ではない。

uml20_state_machine_final.png

まとめると、終了状態は、以下のような状態である。

  1. 終了状態を起点とする遷移は設定することはできない。
  2. 終了状態を含む領域を含む状態には、その状態を起点とする遷移を設定することができ、その遷移にはイベントを設定できる。ヌル遷移に設定することもできる。
  3. 2のような終了状態には、他の状態と同様、とどまることができ、イベントを待ち受けることができる。

関連記事

  1. [状態マシン図] 終了同期を取る
    http://qiita.com/saltheads/items/f49e7418bb3034949bad
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4