UML では、概念モデルで現実世界に対応したオブジェクトの静的な 関係を表し、相互作用図( シーケンス図 , 協調図)により、時系列 に対応したユースケースの具体的な記述を行う。そして、個々のオ ブジェクトの振る舞いは、状態図で表現する。
これらのモデルは、ある意味でオブジェクトの並列実行を仮定している。 しかし、オブジェクト指向プログラムを普通の逐次型プログラム言語で 記述する時には、なんらかの方法で並列実行をシミュレーションしなくては ならない。そのためには以下のような方法がある。
この三つの方法の利点と欠点について考察してみよ。
Graphical User Interface を含むプログラムでは、その表示され るもの(View) と、それが表しているObject (Model) というように わけてプログラムする方法がある。View と Model とは同期を取る 必要があり、それを担当するControllerというObjectが担当する。 これを、Model-View-Controller (MVC) という。
MVC は、Phigs などでも採用されていて、GUIや3D Visualのプログラムでは 良く使われる手法である。しかし、Controller が複雑になることが多く、 View と Model とで同じような構造体を用意しなければならないなど、不都合な 点も多い。
MVC や、Thread などはソフトウェア・パターンと呼ばれるものの一部 である。
GRASPパターン (汎用責務割り当てパターン) | |
---|---|
パターン名 | 説明 |
Expert |
一般的には何に責務を持たせるべきか
情報エキスパート、すなわち責務を遂行するために必要な情報を持っている クラスに責務を割り当てる |
Creator |
生成の責務は何に持たせるべきか
以下のどれかの条件が真である場合に、クラスAのインスタンスを生成する 責務をクラスBに割り当てる
|
Controller |
システムイベントを処理する責務は何に持たせるべきか
システムイベントメッセージを処理する責務は、以下のどれかを表す クラスに割り当てる
|
Low Coupling (疎結合性) |
依存性を弱め、再利用性を高めるにはどのようにすればよいか
結合性を疎に保つように責務を割り当てる |
High Cohesion (高凝集性) |
複雑さを管理しやすくするにはどのようにすればよいか
凝集性を高く保つように責務を割り当てる |
Polymorhphism ( 多相性 ) |
型によって振る舞いが変化する場合には、何に責務を持たせるべきか
選択肢や振る舞いが型(クラス)によって変化する場合は、多相的操作を 用い、振る舞いの変化する型にその振る舞いのための責務を割り当てる |
Pure Fabrication (純粋架空物 ) |
追い詰められてはいても、高凝集性、疎結合性、再利用性を損ないたくない
場合には何に責務をもたせればよいか
高凝集性、疎結合性、再利用性を促進するために、問題領域を いっさい表現しない人工的なクラスを作り、高度に凝集された責務を そのクラスに割り当てる |
Indirection (間接化) |
直接的な結合性を避けるには何に責務を持たせるべきか
他のコンポーネントまたはサービス間に介在する媒介オブジェクトに 責務を割り当て、コンポーネントやサービスが直接に結合されない ようにする |
Don't Talk to Strangers (未知の存在には話かけない (デルメルの法則)) |
間接オブジェクトの構造を把握しないで済ませるには何に責務をもたせるべきか
責務をクライアントの直接オブジェクトに割り当て間接オブジェクトと協調 させる。これにより、クライアントが間接オブジェクトを把握する必要が なくなる。メソッド内でメッセージを送れるのは以下に示すオブジェクト に対してだけである。
|
今回の問題を kono@ie.u-ryukyu.ac.jp まで、来週までにメールで送ること。 Subject には、
Report on Software Engineering Lecture 6/29を付けること。