アスペクト指向勉強会(第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 に定義されないといけない」とあるが、クラスは決まっていて、操作や属性だけテンプレート化できてもいいんじゃないだろうか?
整理すると、
- クラスをテンプレート化、操作、属性は固定。
- クラスは固定、操作、属性をテンプレート化。
- クラスも、操作、属性もテンプレート化。
の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 の操作呼出しが素直に書けると思う。