アスペクト指向勉強会 (第11回) - Map to Implementation

今日と次回は実装編。今日は AspectJ、次回は AspectWerkz と CME (Concern Manipulation Environment) をとりあげます。

Chapter 7 Map to Implementation

AspectJ

千葉先生の本良さげですね。早速買おうっと。

Seasar のMLでも話題になっていたけど、Intertype Declarations というのができるらしい。既存の型に属性や操作を追加できるっていう理解でいいかな。

Crosscutting Theme を実装する場合、Abstract Aspect と Concrete Aspect に分けて実装すると、Advice のコードの再利用がしやすい。

Overview of Steps

Abstract Aspect の実装手順。

  1. Crosscutting Theme に対して Abstract Aspect を宣言する。
  2. Crosscutting Theme の各クラスについて...
    1. インタフェースを宣言する。
    2. シーケンス図を開始する操作について...
      1. Abstract Pointcut を宣言する。
      2. Abstract Pointcut の引数は、対象オブジェクトとテンプレート操作の引数。
      3. before、after、around を宣言する。
    3. シーケンス図を開始する操作に続く操作について...
      1. インタフェースに抽象メソッドを宣言する。
    4. テンプレートとして定義されていない操作について...
      1. Intertype Declaration として実装する。
    5. 属性を Intertype Declaration にマッピングする。
    6. 関連を Intertype Declaration にマッピングする。
  3. その他のクラスを直接実装する。

操作の実装で、抽象メソッドを使用する場合と Intertype Declaration を使う場合の使い分けがよくわからなかった。

Base Themes

各 Theme は Aspect として実装する。それを空のクラスに Weaving する。これはかなり目から鱗