Aspects as Crosscutting Concerns or Aspects as Context
英語が怪しいけど、まあ、無視して、、、
アスペクトの普通の見方は、Crosscutting Concerns を含むモジュール単位、みたいな雰囲気だと思うけど、それよりも or それに加えて、Context (文脈)を表すのがアスペクト、と考えるのも有効的かもしれない。
Aspectual Polymorphism [1][2] に関連する見方だとは思うけど、or AspectJ みたいな、Caesar と比べると static な AOP 言語では、ちょっとうまく表現するのは難しいかもしれないけど、アスペクトを Context を表す、とみなしたとき、意外と適用範囲がわかりよいかもしれない。
最近書いた例では、そのような文脈に対応するのは、ゲームの難易度。ゲームの難易度によって、ゲームの実行内容が変化する。敵が強くなるかもしれないし、スコアが変動するかもしれないし、出てくるアイテムの出現頻度なんかにも影響するかもしれない。このような concern は、Crosscutting Concern の一つだと思うけど、文脈に対応するのが、ゲームの難易度にあたると思う。どのようなアスペクト(ゲームの難易度)がデプロイされているのかにしたがって、ゲームの内容が変化する。
他の例は? たとえば、曜日ごとに販売製品とか、割引率が変化するとか。この場合は、曜日が文脈(or アスペクト)になる。あるいは、時間帯によって割引率が変化するとか。この場合には、時間帯が文脈になる。プログラム実行期間に、どのようなアスペクトがデプロイされているかによって、実行内容に変化を生み出せる。
まとめると:
- アスペクトを文脈としてみなすのは、妥当か?
- Crosscutting Concerns の種類の一つとして、Context がある? もしそうなら、他にどんな種類の Crosscutting Concern がある?
- AOP 言語は、よりダイナミックであるべきか?
- Aspectual Polymorphism は if 文を減らすか?
- 普通の Polymorphism も if 文を減らす。では、次の概念を考えるときには、どうやったら if 文を減らせるのか、の視点で考えればよい?
リソース:
- [1] M. Mezini and K.Ostermann. Conquering Aspects with Caesar. the 2nd International Conference on Aspect-Oriented Software Development. (2003)
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp
- [2] M. Haupt, C. Bockisch, M. Mezini, K. Ostermann. Towards Aspect-Aware Execution Models. Technical Report TUD-ST-2003-01. (2003)
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp