図の送り方例

Use case
単一継承と多重継承

## シーケンス図と協調図

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

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

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

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 で制御する。

expand 伸び縮みするかどうか
fill 埋めるかどうか
side どちらに寄せるか

/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 でもだいたいのことを知ることができる。

## 状態図

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

### 状態モデル

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

電子レンジの扉を開ける
食品を入れる
扉を閉める
スィッチを入れる
加熱中
加熱終了
扉を開ける
食品を出す
扉を閉める

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

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

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

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

### 問題

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