StrategyとStateパターン

Download Report

Transcript StrategyとStateパターン

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