====== 常駐部の開発 ====== ===== 状態遷移図を作成する ===== キッチンタイマーの動作を想像しながら状態を書き出し、遷移するためのイベントを記述します。 {{:kitchen_timer:state_chart.png?nolink&500|}} * 起動直後は、数字入力モードです。 * 数字キーで数字が入力できます。 * 開始キーでカウントダウンモードに移行します。 * カウントがゼロ(タイムアップ)になると、アラームを鳴らします。 * アラームが鳴っている時に停止キーで数字入力モードに戻ります。 数字入力モード時に停止キーを押されたときなど、この時点でも考慮漏れがあることが容易に想像できますが、ここはあえて次のステップに進みます。 ===== 状態遷移表を作成する ===== 先ほど作った状態遷移図をもとに、状態遷移表を作ります。 {{:kitchen_timer:state_table.png?nolink&500|}} ==== 状態遷移表の見方 ==== * 横軸にステートを記述します。状態遷移図に記述した3つのステートを記述しています。 * 縦軸にイベントを記述します。状態遷移図に記述した3つのキー入力のほか、タイムアップおよびタイマーのカウントダウン(1秒ごと)もイベントとして実装することにします。 * あるステートにおいてあるイベントが発生した場合、そのクロスする場所のセルが動作対象になります。 * セルには上部に移行先ステート、下部に動作を記述します。 * 「ー」のセルは、ステート遷移しない事をあらわします。 * 「/」のセルは、何もしない事をあらわします。 * 「×」のセルは、この状態はありえない事をあらわします。 たとえば、「数字入力ステート時に開始キーが押された場合、タイマーをスタートさせてカウントダウンステートに移行する」と読みます。 黄色いバックグラウンドの箇所が、状態遷移図で設計した時に考慮されていた動作で、それ以外は考慮漏れの動作です。このように状態遷移表を使うことで、実装前にモデルベースで漏れのない動作設計ができます。