Software Engineering Lecture 6/5

Software Engineering Lecture 6/5

復習

情報モデルを思い出そう。


これはオブジェクトの相互の参照(Reference)を表している。さら に、これは個別のインスタンスを表しているのではなく、共通の性 質を持ったオブジェクトの集合(class)の関係を表していることに 注意しよう。従って、この図は、オブジェクトの静的な関係を表し ていると考えられる。

先週の宿題の解答例

シュライアー・メラーのオブジェクトライフサイクルでは、オブジェクトの 動的な関係は、状態モデルとプロセスモデルによって表される。



状態モデル

オブジェクトは、いつも同じような動作をするわけではない。あるメッセージを 受け取った後には、異なる振る舞いをするのが普通である。例えば、

という操作を考えよう。この時、同じ「スィッチを入れる」という操作でも 扉が開いている時には、加熱が始まってしまってはいけない。関数型言語では 本当は、そういうことはない。同じ入力ならば、同じ出力を返すのが関数 なはずである。このように、同じ入力でも違った動作をすることを、オブジェクト が状態を持つという。

しかし、オブジェクトはまったく予想できない動作をするわけではない。この 場合でも、この一連の動作は一種のループになっていて、ループの各点では 同じ動作をすると期待される。このようなループがオブジェクトライフサイクル を構成する。

「扉を閉める」「スィッチ」などがオブジェクトの状態を変えるきっかけ である。これらを「イベント」と呼ぶのが普通である。オブジェクトの状態は イベントによって変わる、あるいは、オブジェクトの状態を変えるものが イベントである。

この(個々の)オブジェクトの振る舞いを表すのには、状態遷移図を使うのが 普通である。例えば、一番簡単な例として電灯の状態遷移図を書いてみよう。




問1

電子レンジの振る舞いを表す状態遷移図を記述してみよ

問2

Java で状態遷移を記述するにはどうすれば良いか? 緑、黄、赤と 順に変化する信号機をJavaで記述してみよ。