Software Engineering Lecture 6/19
Menu Menu
先週の復習
- 図の送り方例
- 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 どちらに寄せるか
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 でもだいたいのことを知ることができる。
状態図
協調図は、実際に行われる動作の一部を表すに過ぎない。より完全なオブジェクトの動作は、状態モデルによって表される。
状態モデル
オブジェクトは、いつも同じような動作をするわけではない。あるメッセージを受け取った後には、異なる振る舞いをするのが普通である。例えば、- 電子レンジの扉を開ける
- 食品を入れる
- 扉を閉める
- スィッチを入れる
- 加熱中
- 加熱終了
- 扉を開ける
- 食品を出す
- 扉を閉める
しかし、オブジェクトはまったく予想できない動作をするわけではない。この場合でも、この一連の動作は一種のループになっていて、ループの各点では同じ動作をすると期待される。このようなループがオブジェクトライフサイクルを構成する。
「扉を閉める」「スィッチ」などがオブジェクトの状態を変えるきっかけである。これらを「イベント」と呼ぶのが普通である。オブジェクトの状態はイベントによって変わる、あるいは、オブジェクトの状態を変えるものがイベントである。
この(個々の)オブジェクトの振る舞いを表すのには、状態遷移図を使うのが普通である。例えば、一番簡単な例として電灯の状態遷移図を書いてみよう。
問題
電子レンジの振る舞いを表す状態遷移図を記述してみよ