Aspect Interaction or Aspectual Messaging

`Aspectual' ってつければ何でもいいと思ってんのか! への回答は、え、うん、どーよ?

AspectJ Tip: Chain of Aspect
http://www.ncfreak.com/asato/doc/aspectj-tips/chain.html

とか

Caesar によるデザインパターンの実装 - Abstract Factory
http://www.ncfreak.com/asato/doc/caesar_dp/af.html

とかを書いていて感じたことだけど、各アスペクトは、どれくらい独立だろうか? アスペクト間にどのような相互関係 or 依存関係があるのだろうか? あるいは、どのようにしてそれらの関係を表せばいいのか?


大雑把にいって、アスペクト間の関係の種類(オーバーラップするものもあるかも)には、次のようなものがあるかもしれない:

  • 優先順位。同じ joinpoint をターゲットとしている場合、どっちのアドバイスを先に実行するのか
  • 合成 (Composition)。これは、優先順位、を含む or 同じような気がするけど、、、アスペクト間で同じ joinpoint を共有している場合、どのような順序でアドバイスを実行するのか or どのような依存関係があるのか、という雰囲気?

ちょっと種類分けが微妙だけど、まあ、それは気にせずに。


あまり議論になっていないように感じるのが、3番目のもの。このことに気づいたのは、上でも紹介した Caesar でデザインパターンの実装の実験をしていたときだけど、これは、大きなアスペクトを小さなアスペクトに分割しようしたときに、気づいた。大きなアスペクトの場合には、アスペクトがアクティブ(or デプロイ)された場合には、問題なくアドバイスが実行される。でも、もともと大きなアスペクトを小さなアスペクトに分割した場合、どうやって、両方のアスペクトを同時にアクティブ(or デプロイ)にすればいいのか、という疑問が出てきた。


一瞬そのための実現方法がわからなかったけど、最終的には、同じ join point で各小さなアスペクトをデプロイすればいいんかな、という結果になった。でも、問題は(今書いていて気づいたことだけど)、そのような依存関係(or 協調関係。あるアスペクトがオンのときはあるアスペクトもオン)は、暗黙、ということ。場合によっては、明示的にそのような関係をコードで表せると、良いかもしれない。


まとめると:

  • あるアスペクトがオンのときに、あるアスペクトもオンになる、といった関係は、どのくらい一般的なものだろうか?
  • もし、一般的なものだとしたら、どのような言語的サポートがあるだろうか? 明示的に、そのようなアスペクト間の関係を読み取れるようにすることは有効だろうか?
  • アスペクト間のやりとりを表すような、特別な概念はあるんだろうか?

リソース:

http://www.daimi.au.dk/~eernst/splat04/

http://www.daimi.au.dk/~eernst/splat03/
http://www.ccs.neu.edu/home/lorenz/papers/splat03b/