モデルの記述方法には「厳密な正解」は存在しませんが、筆者が意図した解答例を示します。
この問題を学生に出題する場合、恐らく、「アイドルモード」「運転モード(弱)・(中)・(強)」「減速モード」のそれぞれ5つに首振りモードを入れる可能性があります。例えば、運転モードに絞って考えてみましょう。
図5が記述例です。各処理の右上にある「1」「2」は実行順序を表しています※1)。このように、運転モードの中に首振りモードが入り込み、モードの入れ子状態を作ってしまう可能性があります。
※1)書き方はツールや技法によってさまざまなので、もしかすると読者の皆さまの書き方と違うかもしれません。
プログラムでイメージすると以下のようになります(運転モードのみ記述)。
while(1) { switch(モード){ case 運転: //処理 //運転処理 //首振り処理 break; } }
このように記述することは間違いではありませんが、状態遷移図や処理がどんどん複雑になってしまいます。
5.1の記述方法も間違いではありませんが、各状態のそれぞれに首振りモードが付いてしまうため、複雑で分かりづらく、手間がかかります。そこで、「アイドル・運転・減速」を実行する状態遷移図とは別の状態遷移図を別途作ります。プログラムでイメージすると、以下のようになります。
while(1) { //アイドル・運転・減速モード switch(モード){ case 運転: //処理 //運転処理 break; //・・・ } //首振りモード switch(首振りモード){ case 首振りOFF: //首振りOFF処理 break; case 首振りON: //首振りON処理 break; } }
後段にプログラムを追加しているように、アイドル・運転・減速モードとは別のものとして実装します。結果として、機能追加がやりやすく、図と表も分かりやすくなります。状態遷移図と状態遷移表を下記に示します。
このように、基本機能(アイドル・運転・減速モード)と分離した状態遷移図・状態遷移表を記述することで、より簡単に機能追加できます。
Copyright © ITmedia, Inc. All Rights Reserved.