LoginSignup
6
10

More than 5 years have passed since last update.

[状態マシン図] UML2.0 仕様の細かな注意点

Posted at

状態マシン図を勉強している中級者以上向けに、細かな注意点をいくつか説明しておこう。

(1) 領域は名前空間を継承している。
直交状態で、互いに直交している領域に、同じ名前の状態があっても良いことになっている。それは領域に名前をつけて区別できるからである。

上位状態の名前:領域の名前:領域内の下位状態の名前、というふうに名前空間がつくので、「領域内の下位状態の名前」が互いに同じでも良い。
領域に名前をつける工夫をすることで、凝集度が高いモデルが作れる可能性がある。astah*は、領域に名前が付けられなくて、ちょっと残念。

フルパスの名前空間は読むと長いので、レビューしやくするためには、
やはり、上位下位を含めすべての状態に別の名前をつけるのがおススメ。

01_region_inherites_namespace.png

(2) 内部遷移は、状態が保有するのではなく、領域が保有する。astah*では、内部遷移は、状態が保有している。UML2.0仕様では、状態が保有する遷移は存在せず、領域が保有する遷移しか存在しない。

つまり、内部遷移は、状態が保有する領域が遷移を保有するしかない。
このように決まってはいるが、実用上は、状態が保有していれば十分なので、この点は、ツールの実装仕様で良い。

02_internal_transition.png

内部遷移は遷移の仲間ではあるが、sourceやtargetとする節点はどこかなど、気にしてはいけない。領域は節点ではない。

また、状態が保有する遅延トリガは、ツールでサポートされておらず、扱いが難しいので、遅延トリガは使わずに分析、設計する。

(3) 遷移1本に、トリガは複数設定できる。

astah*では、遷移1本にトリガは0個か1個であって、2個以上は設定できないことになっている。これはこのほうがシンプルで統一的でわかりやすい。この点も、ツールの実装仕様で良い。

たとえ、UMLでできるからと言って、1本の遷移に2つ以上のトリガを設定しないこと。

03_transition_has_many_triggers.png

(4) 最終状態は、疑似状態の仲間ではなく、状態を継承している。

図を描画しているときは、疑似状態か状態かあまり意識しないが、実際の動きとしては、最終状態は状態の仲間であり、
・最終状態を起点とする遷移を持てない。
・入場時アクションなどを持てない。
など多くの制約付きの状態であるが、状態のサブ状態にある最終状態であれば、イベントを受け取れるし、タイムアウトもできることを知っておく。

04_final_state.png

(5) 遷移は名前空間を継承している。

コード生成するときは、もちろん遷移1本ずつ違う名前が必要。
これは分析モデル作成時には不要なので気にしないで良い。

05_transition_inherits_namespace.png

(6) ジャンクション疑似状態も、選択疑似状態も、
2つ以上の入力、2つ以上の出力を同時に持てる

06_junction_choice.png

UML仕様上は、ジャンクション疑似状態、選択疑似状態ともに、複数入力、複数出力できるので、以下のような状態マシン図も描ける。しかしこれはとてもわかりにくいので避ける。

たとえUMLでできるからといってやらないこと。状態マシン図はフローチャートではない。

ジャンクション疑似状態は、1出力のみ、
選択疑似状態は、1入力、2出力のみ。2出力の片方は必ず[else]、という規約をチームで決めておこう。

071_junction_choice.png

上のジャンクション疑似状態は、以下のモデルと同等の振る舞いをする。

072_junction_choice.png

上の選択疑似状態は、以下のモデルと同等の振る舞いをする。状態を起点とする完了遷移(明示的なイベントが設定されていない遷移)はただちに発火する。

073_junction_choice.png

モデルはわかりやすく描こう。

参考リンク

  1. UML2.4.1仕様
    http://www.omg.org/spec/UML/2.4.1/
  2. [状態マシン図] UML2.0 状態機械 モデル
    http://saltheads.blog134.fc2.com/blog-entry-138.html
6
10
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
6
10