ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix asatohan@gmail.com 2006/9/2 ゼミ発表資料
発表内容 問題: StrategyとStateの構造進化の比較 StrategyとStateパターン Dependency Structure Matrix(DSM) DSMの変更 REDSM(Role based Evolution Dependency Structure Matrix)のアイデア StrategyとStateをREDSMで表現・比較 まとめ・考察・今後の予定
問題: StrategyとStateの構造進化の比較 進化前と後でも構造的要素は同じ。 しかし、StrategyとStateの実際の構造進化の違いをどうやって表現する? Strategyパターン Stateパターン 新しいアルゴリズムの追加 新しい状態の追加
StrategyとStateパターン Strategy State 目的 構造 アルゴリズムの集合を定義し、各アルゴリズムをカプセル化して、それらを交換可能にする。 オブジェクトの内部状態が変化したときに、オブジェクトの振る舞いを変えるようにする。 構造
Dependency Structure Matrix 要素の間の依存を表現 Task D Task C Task B Task A Task A Task B Task C Task D . x . x . x . Task AはTask Bに依存している(要素 Aは要素 Bを使っている、参照している)。 Task BはTask Cに依存している。 Task CはTask Dに依存している。
DSMによる表現 ConcreteStrategyB ConcreteStrategyA Strategy Context Client Client Context Strategy ConcreteStrategyA ConcreteStrategyB . x . x x . x x x . x . 新しいアルゴリズムの追加は、どのような影響を持っている? DSMでその影響を表現できるか?
DSMの変更 ソフトウェア工学における従来のDSMの使われ方 一般的な構造進化を表現したい場合 モジュール間(クラスやアスペクト)の依存関係を表現する 実際の具体的なソフトウェアに対してDSMを適用 一般的な構造進化を表現したい場合 モジュール(クラス)間ではなく、ロール間の依存を対象としたほうが便利(Clientクラスは複数あるかもしれない。ConcreteStrategyは複数あるかもしれない)。 抽象的な設計構造(たとえば各デザインパターンにおける一般的な構造)における一般的な進化を表現したい ロールを基にして構造進化の依存を表現できるようにDSMを変更 REDSM(Role based Evolution Dependency Structure Matrix)と名付ける
Strategyパターンの成長:その1 ConcreteStrategyの追加 ConcreteStrategy Strategy Context Client Client Context Strategy ConcreteStrategy . S . . .
Strategyパターンの成長:その2 ConcreteStrategyの追加 StrategyFactory ConcreteStrategy Strategy Context Client Client Context Strategy ConcreteStrategy StrategyFactory . w . . . S .
REDSMによるStrategyの構造進化の表現 ConcreteStrategyの追加 StrategyFactory ConcreteStrategy Strategy Context Client ConcreteStrategy Strategy Context Client Client Context Strategy ConcreteStrategy StrategyFactory . w . . . S . Client Context Strategy ConcreteStrategy . S . . .
Stateパターンの成長:その1 ConcreteStateの追加 ConcreteState State Context Client Client Context State ConcreteState . . . S
Stateパターンの成長:その2 ConcreteStateの追加 ConcreteState State Context Client Client Context State ConcreteState . . S . S
Stateパターンの成長:その3 ConcreteStateの追加 StateFactory ConcreteState State Context Client Client Context State ConcreteState StateFactory . . w . S S .
REDSMによるStrategyとStateの構造進化の比較 ConcreteStrategyの追加 Strategyパターン Client Context Strategy ConcreteStrategy StrategyFactory . w . . . S . Client Context Strategy ConcreteStrategy . S . . . ConcreteStateの追加 Stateパターン Client Context State CState . . . S Client Context State CState . . S . S Client Context State CState StateFactory . . w . S S . CState=ConcreteState
まとめ REDSM(Role based Evolution Dependency Structure Matrix)のアイディアを提案 異なる設計構造(たとえばStateやStrategyや、Factoryを使う/使わない)における構造進化の影響の違いを表現するのに便利
考察と今後の予定 REDSMについてもっと考える 他のパターンで演習 他の言語(たとえばAspectJ)ではどうなる? ロールとは何? 依存とは何? 依存の種類・強弱とその意味は? ロールの粒度は適切? デザインパターンでは、クラスにロールがあるだけでなく、メソッドにもロールがあると考えられる(たとえばStateの場合だとhandleメソッドを呼び出すrequestメソッド)。 他のパターンで演習 他の言語(たとえばAspectJ)ではどうなる? とはいえ、REDSMは適切? 他の表現方法があるかも? そもそも従来のDSMの使い方との違いは?