状態遷移表を使用した設計モデル(拡張階層化状態遷移表):状態遷移表による設計手法(4)(3/3 ページ)
状態遷移表による設計手法について解説。今回は、前回作成した要求分析モデルを基に、「設計モデル」を作成する。プログラミングを意識したモデリングを行うため、「拡張階層化状態遷移表」による表記を用いる。
アクティビティとは
アクティビティとは、イベントを検出した際や状態が遷移した際など、特定の状況下で呼び出される機能、または処理を表現したものです。
種類は、「状態アクティビティ」「イベントアクティビティ」「トリガアクティビティ」「STMメインアクティビティ」など、さまざまなアクティビティが存在しています。その中から今回は、状態アクティビティを紹介します。
状態アクティビティには、「状態スタートアクティビティ」「状態モードアクティビティ」「状態エンドアクティビティ」「ディスパッチアクティビティ」などが存在します。ここでは、状態スタートアクティビティと状態エンドアクティビティについて紹介します。
状態スタートアクティビティの例
状態スタートアクティビティは、状態遷移が行われた際に、最初に実行する処理や機能を表現したものです。
図14のように、状態に遷移した際、最初に実行するべき処理は、状態スタートアクティビティによりまとめて表現できます。
状態エンドアクティビティの例
状態エンドアクティビティは、状態遷移が行われた際に、最後に実行する処理や機能を表現したものです。
図15のように、状態に遷移した際、最後に実行すべき処理は、状態エンドアクティビティによりまとめて表現できます。
アクティビティの効果
図16のように、通常のモデルを、状態アクティビティを使用して表現することにより、すっきりとしたモデルに変更できます。
キッチンタイマーモデルをアクティビティで機能拡張してみよう
それでは、キッチンタイマーのモデルをアクティビティで機能拡張してみましょう。
実は、今回の状態遷移表はカウントダウン状態で、「カウントダウン停止」処理が2つ存在していますが、これらを状態アクティビティでまとめて表現すると有効なモデルとなりません。ここでは、あくまで状態アクティビティで表現した際の例として紹介します。
図17のモデルで、カウントダウン状態へ遷移する際、「カウントダウン開始」処理を行っています。また、アラーム音出力状態へ遷移する際、「アラーム音出力」処理を行っています。これらを状態スタートアクティビティへ変更します。また、カウントダウン状態から遷移する際、「カウントダウン停止」処理を行っています。そして、アラーム音出力状態から遷移する際、「アラーム音停止」処理を行っています。これらの処理は、状態エンドアクティビティに変更します。変更後の状態遷移表を図18に示します。
階層化とは
階層化とは、1つの状態遷移表を複数の状態遷移表で分割表現したものです。階層化を行うことにより、状態遷移表の巨大化を抑制できます。
例えば、図19の状態遷移表は、状態が9個、イベントが12個、アクション(処理セル数)が108個も存在しています。この状態遷移表を階層化表現することにより、アクション(処理セル数)を約半分の50個まで減らすことができます。
階層化の種類は、イベント(事象)に着目して階層化を行う「事象階層化」と、状態に着目して階層化を行う「状態階層化」が存在します。
キッチンタイマーモデルを状態階層化してみよう
それでは、キッチンタイマーモデルを状態階層化してみましょう。
状態階層化の候補は、状態を親子関係で表現している部分です。実は、今回の状態遷移表は、1つの状態で表現した方が分かりやすいモデルとなります。ここではあくまで、状態階層化を行った際の例として紹介します。
階層化の対象となる部分は、時間計測状態の子状態で「カウントダウン」「アラーム音出力」が存在している箇所です(図20)。
階層化を行うと、図21のようになります。
今回のまとめ
今回は“状態遷移表を使用した設計モデル”をテーマに、前回作成した要求分析モデルを基に、拡張階層化状態遷移表設計手法を使用して、設計モデルを作成しました。
拡張階層化状態遷移表は、組み込みソフトウェアの開発を行う際に必要な表現を追加し、巨大化する状態遷移表を階層化により解決したものです。今回はその一部を紹介しました。
さて、次回は「状態遷移表からの実装」をテーマに、今回作成した設計モデルを基にして、ソースコード(実装言語)を作成する手法を紹介します。お楽しみに! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.