03
04
[状態マシン図] UML2.0 状態機械 モデル
2014.03.04(00:11)
UML2.0 (UML2.4.1) State Machine (状態機械) モデル
UML状態機械は、その仕様がクラス図を使って定義されています。

この図を読んでみましょう。
読む前に、クラス図での多重度のおさらい。
*が0個以上と読めればとりあえずOKです。


領域が1個

領域が2個




クラス図を読むと最終状態は、状態であって、疑似状態ではないことがわかります。UML仕様を見るとこうなっています。最終状態には以下のような制約があります。

最終状態にいて、トリガー5を待っている状態になる。
このように、領域の中の最終状態では、
領域を含む上位の状態で発火するトリガーを待っていることがわかります。
状態の下位にある最終状態はシステムの終わりではありません
参考文献
UML状態機械は、その仕様がクラス図を使って定義されています。

この図を読んでみましょう。
読む前に、クラス図での多重度のおさらい。
多重度 | 意味 |
1 | 1個のみ |
* | 0個以上 |
0..* | 0個以上 |
0..1 | 0個か1個 |
1..* | 1個以上 |
- まず、図の上側中央、状態機械から領域に延びる関連をみてください。(以下同様にクラスをたどってください)
状態機械は領域を1つ以上もっています。 - 領域は、0個以上の節点と、0個以上の遷移をもっています。
- 節点のなかまには、疑似状態と状態があります。(2.と合わせて、領域には0個以上の状態があります)
- 節点には、入ってくる遷移が複数と、出てゆく遷移が複数あります。1つの遷移にはソース(遷移元)の接点と、ターゲット(遷移先)の接点があります。
入ってくる遷移も出てゆく遷移もないような節点はありえないのですが、クラス図の多重度表現では複数の多重度にまたがる制約は表現できません。 - 遷移には、ガードが0個か1個あります。
- つぎに状態をみてください。
- 状態は、内部にインスタンス変数があって、合成状態かどうか、合成直交状態かどうか、単純状態かどうか、サブマシン状態かどうか、それぞれ真偽値をとります。クラス図には表現できませんが、全部の場合があるわけではなく、たとえば、単純状態と合成状態とサブマシン状態は排他的です。合成状態は、合成直交状態でない場合(領域が1個だけ)と合成直交状態(領域が複数)であるのとがあります。
- 状態には領域が0個以上かあります。
- 状態には、入場振る舞いが0個か1個あります。退場振る舞いとdoアクティビティも同じです。
- 最終状態は、状態のなかまです。
- 状態は、たくさんの疑似状態を含んでいます。開始疑似状態とか。
- 状態がサブマシン状態を含む場合(親の場合)と、サブマシン状態であった場合(子の場合)をみてゆきます。
- 状態から左下に出て左端を上昇し状態機械へ入っている関連を見ます。
状態は0個か1個の状態機械を持ちます。
状態機械を持っていたとき、その役割名は、サブマシンです。 - サブマシンである、状態機械には、1つ以上の領域があります。(領域は2.へ)
- 状態は、connectionPoint 接続点を0個以上持てます。接続点は疑似状態であって、おそらく入場点や退場点です。
- 状態機械も、connectionPoint 接続点を0個以上持てます。接続点は疑似状態であって、おそらく入場点や退場点です。
- 状態は connection 接続点参照を複数もつことがあります。
「接続点参照は、下位機械の状態から参照される状態機械内で定義される入場/退場点の使用を表す」ものです。
親子間のリンクのことです。親と子の間で互いに参照できる関係がある、という意味でしょう。 - 1つの接続点参照は、0個以上複数の入場点と、0個以上複数の退場点を持てます。
- 読めましたか?
上のクラス図から抜粋した図です。2通りのComposite Patternが見つけられます。
まず1つめ。
- 状態は領域を0個以上持ち、
- 領域は節点を0個以上持ち、
- 節点の仲間に状態がある。

領域が1個

領域が2個

2つめ

- 状態は0個か1個の状態機械を持ち、その名前はサブマシン
- 状態機械は1個以上の領域を持ち、
- 領域は0個以上の節点を持ち、
- 節点の仲間に状態がある。

最終状態にも注目。

クラス図を読むと最終状態は、状態であって、疑似状態ではないことがわかります。UML仕様を見るとこうなっています。最終状態には以下のような制約があります。
- 最終状態を起点とする遷移は持てない。
- 入場時アクション、退場時アクション、doアクティビティを持てない。
- 領域は持てない。サブマシンも持てない。

- 状態2でトリガー4がおきると最終状態に遷移し、状態1の内部にある領域は完了する。
- でも、その上位はまだ完了しておらず、
- そのあと、トリガー5がおきると状態3に遷移する。
- そのあと、トリガー6がおきるとすべての領域が完了して
- 状態機械全体が終了する。
最終状態にいて、トリガー5を待っている状態になる。
このように、領域の中の最終状態では、
領域を含む上位の状態で発火するトリガーを待っていることがわかります。
状態の下位にある最終状態はシステムの終わりではありません
参考文献
- [書籍] UML2.0仕様書 状態機械
- OMG UML specification
http://www.omg.org/spec/UML/