例で理解するUML状態マシン図

平鍋
モデリングしてますか?
今日は、セイコーエプソンの島さんに、わざわざ長野からおいでいただいて、状態マシン図についてお話しをしていただきます。では、どうぞよろしくお願いいたします。

島さん
皆さん、こんにちは。セサレット(温水洗浄便座)の状態マシン図を、読んでみましょう。
セサレットというのは、こういうものです。
状態マシン図では、四角を使って「状態」を表します。状態から状態にいく矢印の事を「遷移」といいます。
状態の中に上の領域と、下の領域があって二つの事が、同時に起きるというモデルです。
上の領域をまず、読んでみましょう。
最初が、着座センサーオフの場合です。座っていない状態ですね。
こちらが、着座センサーオンの状態です。座ってる状態です。
着座センサーオフのときに、着座を検出すると着座センサーがオンになって、起立を検出すると
着座センサーがオフの状態に戻ってきます。
つまり立ってるときに座ると、着座センサーがオンの所に行って立ち上がると、また着座センサーオフの所にくる、と。
着座センサーオンの時の中に、また状態があって最初は待機中にいます。
着座センサーオンのときは、お尻ボタンが効きます。
お尻ボタンを押すと、お尻洗浄中になって、停止ボタンを押すか、60秒経つとお尻洗浄は止まります。
立っているときと、座っているときとで、できる事が違います。状態によって振る舞いが違います。
こういう時に、状態マシン図を使うと、うまく表現する事ができます。
上の状態と、下の状態が平行して動きます。下を見てみましょう。
最初はフラッシュ待機中です。
フラッシュボタンを押すと、フラッシュが始まります。水が流れ始めます。
終わると、一人でに戻ってきます。
上の状態と下の状態は、平行して動く事ができます。立ってるときも、座ってるときも水を流す事ができますよね。
こういう2つの事が同時にできるという事も、表現する事ができます。
セサレットの状態マシン図を、もう一度見てみます。
セサレットの状態は、2つの領域からできていて、2つの事が同時に起きる事を、表現しています。
状態マシン図というのは、こういう風に、状態の構造がみえる。どこが平行して動いて、どこが入れ子の状態になっているか
というのが分かるところがメリットの1つです。それから、すべての状態に名前が付きます。
着座センサーオフという状態と、着座センサーオンという状態、洗浄待機中という状態と、お尻洗浄中という状態に名前がつきます。
全ての状態と、すべての遷移についているイベントの名前を全部書かないと、状態マシン図は完成しません。
なので、ソフトウェアとして必要な、完全な仕様を表現する事ができます。
あと、状態の中に状態がある、入れ子の状態になっているときに段階的に仕様を理解する事ができます。
とりあえず着座センサーオンと、着座センサーオフの所だけ議論しようと、次に着座センサーオンの中だけを議論しようと
さらに、お尻洗浄中の中だけ、議論しようという風に段階的に議論して、段階的に理解する事ができる、といういいところがあります。
[関連記事/リンク]
– 【対談】UML状態マシン図は、なぜ重要か
– 島ぶくろ (島さんブログ)
1 Comment »