アスペクト指向勉強会(第7回) - Theme Design

寝坊して40分遅れで参加。でも、始まったのも30分遅れだったみたい。

Capter 4 Analysis (前回の残り)

Planning for Design

ここでオブジェクトの識別をするんだけど、結局その方法は書かれていないみたい。ふつうに(?)オブジェクト指向でやればぁ? ということらしい。
で、アスペクト指向分析とオブジェクト指向分析は並行してやるのかが議論になった。別にウォータフォールにやる必要は全然ないけど、この本のスタンスとしては、アスペクト指向分析で Theme を見つけてから、テーマごとにオブジェクト指向分析をやるのかなぁと思う。
ただし、次の章の設計もそうだけど、独立して作業を行うにはこの本の Theme はちょっと粒度が小さすぎる気がする。あまり小さいとその後の Composition が大変そう。

Capter 5 Theme Design

Overview of Designing with Theme/UML

Theme を決めて、オブジェクトを識別したら、あとは Theme ごとに設計すればいいよ、要約すればこんな感じ。
その際、オブジェクトはクラスかクラスの属性に、Theme はメソッドにマッピングされることが多い。
Base Theme に関してはこれで終わり。Aspect Theme は、これに先立ってトリガーとなる振る舞いを識別して、テンプレートパラメータで表す。その後の設計も若干 Base Theme とは異なるけど、それはまた次回詳しく扱う。

Design Base Themes

Crystal Game を例に、Base Theme の設計の説明。上に書いたとおり、Theme ごと独立してふつうにオブジェクト指向で設計するだけ。
ただし、分析で判断(Theme として残すか? Base か Aspectか?)を保留していた Theme について、他の Theme に統合できればする。例えば、drop は distribute-crystals に統合する。
また、結局1つの Theme からしかトリガーされない Theme は Aspect にするまでもないから、トリガーする Theme の方にメソッドを追加して済ませる。例えば、duel は enter-location からしかトリガーされないので、Aspect にはせずに enter-location theme の Player クラスに dual() メソッドを追加する。