連載
» 2012年09月24日 10時00分 公開

状態遷移表を使用した設計モデル(拡張階層化状態遷移表)状態遷移表による設計手法(4)(2/3 ページ)

[塚田 雄一 キャッツ,MONOist]

アクション部分の機能拡張例

 アクションとは、現在の状態にて発生したイベントに対し、実行される処理・機能のことです。

 アクションは、日本語などの「自然言語」や、C言語などの「コンピュータ言語」で記述できます。他に「NSチャート」の表現を行うことも可能です。

 NSチャートの表現は、C言語の「if-else」などの条件分岐構文や、「switch-case」などの条件種別構文の他に、「for」「while」「do-while」などの繰り返し構文の表現が可能です。また、それらの表現は、順次処理を順番に表現することも、選択処理と順次処理を組み合わせて表現することも可能です。つまり、状態遷移表のアクションで構造化表現をすることが可能となります。

NSチャートについて 図9 NSチャートについて

 その他、要求分析モデルで既に紹介しましたが、イベントと状態の組み合わせ上であり得ない組み合わせを表現した「×」状態と、イベントと状態の組み合わせ上、処理を行わないで無視してよい「/」状態の表現が存在します。

不可・無視について 図10 不可・無視について

キッチンタイマーモデルのアクション部分を機能拡張してみよう

 それでは、キッチンタイマーモデルのアクション部分を機能拡張してみましょう。

 時間設定状態で、「分ボタン」イベントが入力された際は、設定値を1分カウントアップします。また、「10秒ボタン」に関しては、もしも設定値が50秒の場合は、分をケタ上げする必要があるため、設定値を1分カウントアップし、秒を0秒に設定します。その他の場合は、設定値を10秒カウントアップするというように条件分岐を使用して表現します。「分ボタン」についても、計測時間の最大値が指定されている場合は、条件分岐を使用して表現する必要がありますが、今回は、最大値が指定されていないため、条件分岐を使用しないこととします。

 次に、「スタートストップボタン」イベントが押された際を考えてみたいと思います。

 前回作成した要求分析モデルで、初期状態と時間設定状態を1つにまとめたため、時間設定ボタンが押され、時間が設定された状態で「スタートストップボタン」が押された場合と、時間設定がされていない“0分0秒”の状態で「スタートストップボタン」が押された場合が存在します。

 現在の状態遷移表では、設定値が“0分0秒”で、「スタートストップボタン」が押された場合は、既にカウントダウン時間であるため、カウントダウンの開始とともに、すぐにアラーム音が出力されます。要求仕様(基本仕様)に、「時間設定完了の場合、カウントダウンを開始する」と記述してあります。それ故、0分0秒の際に「スタートストップボタン」が押された場合は、処理を行わない無視「/」としました。

変更した状態遷移表(アクション部分) 図11 変更した状態遷移表(アクション部分)

遷移部分の機能拡張例

 遷移とは、ある状態からある状態へと移り変わることを意味します。

 機能拡張により、状態を親子表現することが可能となったため、親状態へ遷移した際に、子状態が固定で遷移する場合と、前回の状態を記憶しておき、前回と同じ状態へ遷移する場合が存在します。

 DVDデッキを例に説明すると、前回の状態が早送りで終了していた場合、その状態が記憶されているとすると……、次にディスクを挿入したらいきなり早送りが始まってしまいます。これでは困ってしまいますね。新たにディスクを入れたら、停止状態か再生状態になってほしいものです。

 一方で、一時停止を例に考えてみたいと思います。早送り状態から一時停止した場合、一時停止を解除したら、早送り状態へ戻るべきです。同じく、再生状態から一時停止を行った場合、一時停止を解除したら、再生状態へ戻るべきです。このように、前回の状態を記憶しておき、前回の状態へ遷移しなくてはいけない場合も存在します。

 そのため、必ず固定で遷移する固定型(Fixed)と、全て親子の状態へ遷移する深層記憶型(Deep-Memorized)が存在しています(図12)。

固定型(Fixed)と深層記憶型(Deep-Memorized)について 図12 固定型(Fixed)と深層記憶型(Deep-Memorized)について

キッチンタイマーモデルの遷移部分を機能拡張してみよう

 それでは、キッチンタイマーモデルの遷移部分を機能拡張してみましょう。

 時間計測状態へ遷移する際は、前回の状態がアラーム状態からの遷移であっても、必ず固定でカウントダウン状態へ遷移してほしいので、固定型(Fixed)で遷移させます。

 記述方法は、遷移先表現の時間計測の後に、(F)を記述し、「時間計測(F)」と記述します。ちなみに、深層記憶型(Deep-Memorized)で遷移する際は、(D)と記述します。

変更した状態遷移表(遷移部分) 図13 変更した状態遷移表(遷移部分)

Copyright © ITmedia, Inc. All Rights Reserved.