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

今回もほとんど予習できず。orz

Chapter 5 Theme Design (後半)

Design Crosscutting Themes
Control Flow Restrictions on Triggers

あるクラスに op1()、op2() という2つの操作があったとき、op1() から呼び出された場合だけ op2() にアスペクトを適用するということが、AspectJ ではできるらしい(via Gohさん)。P.180 の Fig.5-15 はそのことを表している。

Listing the Templates for a Theme

「template operation、template attibute は template class に定義されないといけない」とあるが、クラスは決まっていて、操作や属性だけテンプレート化できてもいいんじゃないだろうか?

整理すると、

  1. クラスをテンプレート化、操作、属性は固定。
  2. クラスは固定、操作、属性をテンプレート化。
  3. クラスも、操作、属性もテンプレート化。

の3通りがあると思う。
<ClassA.op1()> という書き方は、2番目なのか3番目なのかわかりにくい。ただし、この本では3番目しか扱っていない。

Referencing Template Structure and Behavior
  • テンプレートでないクラスから、テンプレートクラスを外部参照してはいけない。
  • テンプレートでないクラスから、テンプレートクラスの操作を起動してはいけない。

上に書いたことと関連するが、クラスが固定で操作がパラメタ化されている場合は、「テンプレートクラス」のメソッドを起動しても問題はない気がする。

P2P Communication Theme

上に書いた疑問が一応ここで解決している。
あるクラスにテンプレート化される操作とテンプレート化されない操作が混在する場合、クラスを分けて表現する。P.196 の Fig.5-25 では、Player と TPlayer のようになっている。ちなみに、TPlayer の T は Template の T。
思いつきだけれど、TPlayer は Player を継承して記述すると、TPlayer から Player の操作呼出しが素直に書けると思う。