Software Engineering Lecture 6/9

注意! 6/16は授業があります。6/23 はお休みにします。

## 先週の復習

## 先週は、

## システムの動的振る舞い

オブジェクトは、個々に勝手に動作するのではなく、全体としてある目的を
もって協調して動作するべきであろう。個々のオブジェクトの振る舞いの
総和がシステムの振る舞いを決める。これは単純には、個々のオブジェクトの
状態遷移図の積であるはずである。

しかし、それは人間の手に負えないほど複雑なものであるのが普通である。
たとえば、2状態のオブジェクトが10個あったとすると、その積は2^10=1024
の状態を持つ。
したがって、個々のオブジェクトの状態だけでなく、システム全体の振る舞いを
見通し良くするための表現が必要だと考えられる。

そのためにオブジェクトライフサイクル手法では以下のようなさまざまな
モデルを工夫している。

オブジェクト通信モデル

情報モデルにそってイベントがどのように流れるかを記述する

通信パターン

オブジェクトの通信はランダムに起きるのではなく、通常は決まった
パターンで起きる。例えば、 イベント駆動処理、上位駆動パターン、
下位駆動パターン、制御スレッドなどである。制御スレッドは特に
リアルタイム処理では重要である。

アクションデータフローダイアグラム(ADFD)

Yourdon, Constantine, DeMacro によって導入されたオブジェクトの
相互通信を単位と図的に表現するための形式。

これらのモデルは、ある意味でオブジェクトの並列実行を仮定している。
しかし、オブジェクト指向プログラムを普通の逐次型プログラム言語で
記述する時には、なんらかの方法で並列実行をシミュレーションしなくては
ならない。そのためには以下のような方法がある。

スケジューラオブジェクトが、並列動作するオブジェクトに順次にイベントを
送り、次々に動作させる。
OSが提供するプロセスを使い、プログラムを分割して、プロセス間通信を
使って並列動作を実現する。この場合、分割したプロセスの間でのオブジェクト
の参照は必ずプロセス間通信を経由する。
単一プロセス内のスレッドと呼ばれる並列実行を利用する。この場合は、
メモり空間は共有されているので、オブジェクトの参照は自由である。
ただし、同じオブジェクトのメソッドが同時に動作する場合には、自分で
排他制御をおこなう必要がある。

実際には、最初の方法が一番簡単な実現方法だといえるだろう。 しかし、入出
力処理がともなう場合には、プロセスを分割するかスレッドを使う必要がある。
さらに、スケジューラオブジェクトのプログラムはプロセスモデルを複雑に
してしまうことが多い。

## 問2

この三つの方法の利点と欠点について考察してみよ。

## アクションデータフローダイアグラム

Action Dataflow Diagram は、問題のオブジェクトへの分割が終り、
さらに、個々のオブジェクトのアクション(状態遷移)の解析が終った
後で、複数のオブジェクトのアクションの流れを記述するものである。
実際には、このような順序でOOA/OODが行われるとは限らないし、この
手順は、Rapid proto typing を通して何回も繰り返される。

プロセスとデータフロー
不変データ
オブジェクトデータストア
現在時刻データストア
受理されるイベント

ADFDは、残念ながら全ての場合を尽くして記述することはできない。あくまでも、
典型的な部分を記述することになる。なるべくうまく記述して、アプリケーション
全体の動作を記述するようにする。これはフローチャートではないことに注意する
こと。

## オブジェクト通信モデル

Object 間の通信をみるだけならば、Object Communication Model
というのが適している。

## MVC

Graphical User Interface を含むプログラムでは、その表示され
るもの(View) と、それが表しているObject (Model) というように
わけてプログラムする方法がある。View と Model とは同期を取る
必要があり、それを担当するControllerというObjectが担当する。
これを、Model-View-Controller (MVC) という。

MVC は、Phigs などでも採用されていて、GUIや3D Visualのプログラムでは
良く使われる手法である。しかし、Controller が複雑になることが多く、
View と Model とで同じような構造体を用意しなければならないなど、不都合な
点も多い。

## 宿題

Multi-user card game をPerl/Tkで作ることを考えてみよう。これを、情報モデル、
状態モデル、そして、システム全体の振る舞いを考えることによってオブジェクト
指向問題分析を行う。

まず、情報モデルを作成する。必要なオブジェクトを抜き出す。

カード
カードのたば(pile)
ユーザ
その他

次に、その相互の静的な参照関係を考える。図は、文字で作成するか、
idraw などで作成してメールで送ること。

解答は、
kono@ie.u-ryukyu.ac.jp まで、来週までにメールで送ること。
Subject には、

Report on Software Engineering Lecture 6/9

を付けること。

6/16は授業があります。6/23 はお休みにします。