スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

PlantUML - 状態遷移図(ステートマシン図)

状態遷移(ステートマシン)図とは、 オブジェクト内の状態や、その移り変わりを表現する図です。
この状態遷移図のPlantUML での記法についての解説してみました。
  1. 状態の遷移
  2. 状態の説明
  3. 複合状態
  4. 領域
  5. UML としての状態遷移図の書き方
    1. 状態の遷移
    2. 状態の説明
  6. 参考
State sample
@startuml{plantuml_state_sample.png}
title <size:18>状態遷移図のサンプル</size>

[*] --> 停止
停止 -> 稼働中 : 電源 ON
state 稼働中 {
    [*] --> 加熱中
    加熱中 --> 待機 : when( 現在温度 > 上限温度 )
    待機 --> 加熱中 : when( 現在温度 < 下限温度 )

    加熱中: entry / ヒーター ON
    加熱中: do / 温度監視
    加熱中: exit / ヒーター OFF

    待機: do / 温度監視

    --

    state "加湿 ON" as w_on
    state "加湿 OFF" as w_off
    [*] --> w_on
    w_on --> w_off
    w_off --> w_on
}
稼働中 --> 停止 : 電源 OFF
停止 --> [*]

note bottom of 稼働中 : 加湿器付きヒーター

@enduml

タイトル(title)HTML タグ に関してはシーケンス図、 ノート(note) に関してはクラス図の説明を参照してください。

状態の遷移

状態遷移図の記法では [*] が開始状態、終了状態を表します。
状態の遷移は以下の形式で記述します。
状態 --> 状態 : 遷移の説明
またクラス図など他の図と同様に矢印の方向は - が 2 つで下、 1 で横となります。
ただし、状態遷移図では <-- 記述の矢印の向きを逆にすることはできません。
@startuml{plantuml_state_transition.png}

[*] -> 未予約
未予約 --> 未予約 : 予約[在庫数 < 注文数]
未予約 --> 予約済み : 予約 [在庫数 >= 注文数]
予約済み --> 出荷済み : 出荷作業完了
出荷済み -> [*]

@enduml
Transition sample
PlantUML では、 この [*] や状態定義があるかどうかで、 状態遷移図か判断しています。

状態の説明

次のような記述で状態の説明を追加していくこともできます。
state "状態名" : 状態の説明
また、 他の図と同様に as による別名も使えます。 状態名には記号などが使えないので、その場合にも as で別名を付けておく必要があります。
@startuml{plantuml_state_descript.png}
state "状態 A" as sa

[*] --> sa
sa --> [*]

sa -> 状態B
状態B --> [*]

sa : 状態 A の説明 1
sa : 状態 A の説明 2

@enduml
Descript sample

複合状態

状態定義の中でさらに状態遷移や状態定義を書くと、 状態を入れ子にすることができます。
入れ子にした複合状態は以下の形式で記述します。
state "状態名" {
    サブの状態遷移
}
@startuml{plantuml_state_composite.png}

[*] --> 停止
停止 -> 稼働中 : 電源 ON
稼働中 -> 停止 : 電源 OFF
停止 --> [*]

state 稼働中 {
    冷房 -> 暖房 : 暖房ボタン
    暖房 -> 冷房 : 冷房ボタン
}
@enduml
Composite sample

領域

複合状態のうち、内部の状態が独立、並行して各々遷移が発生する場合には、 破線で区切った領域で表します。
これを PlantUML で記述するには -- を使います。
@startuml{plantuml_state_region.png}
[*] --> Active

state Active {
  [*] --> NumLock_OFF
  NumLock_OFF --> NumLock_ON : NumLock キー
  NumLock_ON --> NumLock_OFF : NumLock キー
  --
  [*] --> CapsLock_OFF
  CapsLock_OFF --> CapsLock_ON : Shift + CapsLock キー
  CapsLock_ON --> CapsLock_OFF : Shift + CapsLock キー
}
@enduml
Region sample

UML としての状態遷移図の書き方

PlantUML の記法ではなく、 UML としての状態遷移の記述の仕方について補足しておきます。

状態の遷移

UML としては遷移の説明は次のような形式になります。
イベント名 [ガード条件] / アクション
UML transition sample
用語 説明
イベント 遷移が起こるきっかけとなる出来事
ガード条件 遷移が許される条件。
アクション 遷移が起きた時に実行される操作
各要素は省略することができます。 ただし、省略しているとイベントかアクションか区別がつかないので、 "/" を残すことがあります。

また、イベントには次のような種類があります。
イベントの種類 記述例
シグナルを受け取る  
メッセージを受け取る(メソッドが呼ばれる)  
時間が経過する after ( 5 秒 )
条件が真になる when ( 設定温度 > 現在温度 )
UML event sample

状態の説明

状態の説明に記述する動作には次のようなものがあります。
記述 説明
entry / 入場アクション 状態に入った時に実行するアクション
do / アクティビティ 状態中に実行し続けるアクティビティ
入ったときに始めて、出るときに中断する動作。
exit / 退場アクション 状態から出るときに実行するアクション
イベント/ アクション 指定した "イベント" が起きた時に実行されるアクション
ただし、状態の遷移は起こらない。
UML descript sample

参考

このページの記述には以下のサイトを参考にさせていただきました。

関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
28位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
4位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

07月 | 2017年08月 | 09月
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。