Software Engineering Lecture 6/19

Menu Menu


先週の復習


シーケンス図と協調図

シーケンス図と協調図は、オブジェクト間の通信の様子を表す。


協調図はメッセージに順序付けのための番号が付加されている。

メッセージの表記の仕方は以下のようになっている。

    return := message(parameter : parameterType) : returnType

さらに繰り返しの記号を付けることもできる。

    1*: [i := 1..10] li := nextLineItem(): SaleLineItem


問題

カードゲームのオブジェクトには、カードの集合を表すカードパイルがある。カードパイルにopen_all()を送ると、そのカードパイルのカード全体がオープンされる様子を協調図で示せ。


Perl/Tk

Perl/Tk はPerlを使ってX-Windowを操作するオブジェクト指向ライブラリである。Perl/Tkの例題

    use Tk;
    $top = MainWindow->new();
    $text = $top->Text();
    $text->pack();
    $text->insert('end',"test string");
    $text->see('end');
    $top->update;
    $top->MainLoopl


Widget

Perl/Tk では、Wigetという部品を組み合わせてアプリケーションを作る。部品の画面表示の組み合わせ方は、pack で制御する。

/usr/contrib/bin/widget を参考にすること


Perl/Tkによる記述

Perl/Tk では、MainWindow を作り、そこに、いろいろなwidgetをpack していく。

        my $main = MainWindow->new();

とすれば、MainWindowができる。MainWindowのインスタンスとして、いろいろなものを使うことができる。

Label文字を印として置く
Text編集用のテキスト
Entry入力カラム
Canvas図形表示
Frameいくつかのwidgetをまとめる


Canvas とタグ

Canvasには以下のような図を書くことができる。

oval楕円
rectangle
line
polygon多角形
bitmapイメージ
textテキスト

これらは、CanvasにタグやIDで指定することによって移動したり変形したりすることができる。

$canv->move($ball, $deltax, $deltay);移動
$canvas->itemconfigure($view,-fill=>'black');色などの変更
$canvas->delete($view);削除

これらに関しては man canvas でもだいたいのことを知ることができる。




状態図

協調図は、実際に行われる動作の一部を表すに過ぎない。より完全なオブジェクトの動作は、状態モデルによって表される。


状態モデル

オブジェクトは、いつも同じような動作をするわけではない。あるメッセージを受け取った後には、異なる振る舞いをするのが普通である。例えば、
  1. 電子レンジの扉を開ける
  2. 食品を入れる
  3. 扉を閉める
  4. スィッチを入れる
  5. 加熱中
  6. 加熱終了
  7. 扉を開ける
  8. 食品を出す
  9. 扉を閉める
という操作を考えよう。この時、同じ「スィッチを入れる」という操作でも扉が開いている時には、加熱が始まってしまってはいけない。関数型言語では本当は、そういうことはない。同じ入力ならば、同じ出力を返すのが関数なはずである。このように、同じ入力でも違った動作をすることを、オブジェクトが状態を持つという。

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

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

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


問題

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