1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[状態マシン図] 終了同期を取る

Last updated at Posted at 2014-05-08

状態マシンを設計していて、何か2つのことを同時並行しておこない、両方が終了したら、次の状態に遷移したい、というモデルを作りたいことがある。

そのときに、直交状態+終了状態+完了遷移を組み合わせるとうまく実現できる。

36_state.png

状態21と状態22が直交していて、両方が終了状態まで到達したときに、状態9に遷移する。

このように、内部に直交する領域が複数ある場合は、すべての領域が終了状態になったときに、その状態が終了状態となると決められている。

その領域が終了状態なったかどうかは、以下のアルゴリズムで判断する。

  1. その状態が単純状態であった場合は、入場時アクションを実行終わったところで、終了状態に到達している。
  2. その状態が複合状態(コンポジット状態)であった場合は、
    1つまたは複数ある領域(==状態)のすべてが終了状態に到達しているときに、終了状態となる。
  3. その領域に終了状態が1つ以上ある場合は、いずれかの終了状態に到達しているならば、終了状態である。
  4. その領域に終了状態が1つもない場合は、1と同じ。

このため、以下の場合は、

37_state.png

この場合は、領域23は状態10と状態11のどちらにいても終了状態であると判断され、状態2にいればIS_IN(状態23が終了状態)は常にTRUEとなり、流れは上のモデルと同じく、状態21と状態22がともに終了状態に到達したときに、状態9に遷移する。

直交合成状態で説明したが、サブマシンを持つ場合でも同様である。


参考文献

  1. UML2.0 仕様書

    http://www.amazon.co.jp/dp/4274066630/

    p.723 完了遷移と完了イベント
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?