BLOGTIMES
2004/04/17

Aspect指向って知ってますか?

  aop 
このエントリーをはてなブックマークに追加


『AspectJによるアスペクト指向プログラミング入門』

最近はAspectJなんかの解説もずいぶん増えてきたので知っている人も多いと思っていたのだけど、研究者とか新し物好き以外の人にはいまいち浸透していないというのが実情だと思う。

先日ちょっとAOPについて書いたら、ある人から「AOPって何?」と聞かれてしまったのでちょっと解説を。うろ覚えで書いている部分もあるので、間違いがあれば突っ込んでください。まぁ、僕の解説なんか読むより、この辺の本を読むほうが手っ取り早いし正確なんだろうけど。

AOP*1とは

AOPはPost-OOP*2の有力候補とされている新しいプログラミングパラダイムである。その概念については、当時Xerox PARCで研究にあたっていたGregor Kiczales氏が1997年にECOOP*3で発表した論文*4が最初であるようだ。

内容を読むとjoin pointのモデルが現在のAspectJなんかとずいぶん違ったりするが、現在の形になるまでにそれだけいろいろと紆余曲折があったということだろう。

AOPとOOPの関係

このように話を始めてしまうと「AOPになったらOOPはいらなくなってしまうのか」という質問を良くされるのだが、決してそんなことはない。AOPはOOPで解決できなかったカプセル化の問題を解決するために考え出された仕組みであり、OOPの代替技術、対抗技術というよりは、OOPの延長線上にある、OOPの補完技術という位置づけという感じだろう。

AspectWeaver

実際にAOPで書かれたプログラムを実行するにはAspectWeaverと呼ばれているツールが必要になる。Java上で行うための実装としてはAspectJが有名だが、そのほかにも、Jbossの4.0から導入されたAOP機能とか、IBMHyperJAISTMixJuiceというものもある。

AspectJ

AspectJはもともとXerox PARCで作られていた実装で、現在Eclipseのプロジェクトの1つになっている。IDEのデファクトになりつつあるEclipseとの相性もあって、最近急速に普及が進んでいる(と思われる)。

Jboss AOP

Jboss AOPのAspectWeaverはJavassistによって実装されているのだが、実はこのJavassistは国産の技術だったりする。開発したのは東京工業大学 大学院 情報理工学研究科 助教授の千葉先生。千葉先生はJbossのコミッターでもあるらしい。

Jbossは仕事でも何かと使う機会が多いので、早めにキャッチアップしておきたい。

横断的関心事(cross-cutting concerns)

Aspect指向ではプログラムのレスポンシビリティに関する事柄を関心事という単位で考える。横断的関心事とはOOPではうまくモジュール化することができなかった、モジュールにまたがった機能のことを指している。例えば、トランザクションのbegin/commitに関する処理や、セキュリティ、ロギングなどの問題がこれにあたる。

OOPでは、モジュール間にまたがって存在している機能に関するコードのうち、機能の実現する部分をモジュール化することはできるものの、コードを呼び出す部分についてはモジュール化することができない。

現実にログ出力ルーチンを呼び出すような部分はプログラムのいたるところに散らばってしまっているはず。AOPはこのような問題を解決できる。

結合点(join point)

join pointとはプログラム中でAspectが付加出来る場所のことを指す。AOPではjoin pointをpoint cutとして指定することにより、プログラムがjoin pointまで実行されたときに指定したAspectを実行する。point cutは指定したjoin pointでもとのプログラムを中断するような格好になるのでそう呼ばれるんだろう。また、このようなプログラムの実行過程は、プログラムの編み合わせに見えることからWeavingと呼ばれる。これらがAOPの大きな特徴である。

このような仕組みよって、横断的関心事に関するコードをクラスから分離し、Aspectという形でモジュール化することができるようになる。

今年の僕の目標

今年中に1つ以上のプロジェクト(プロダクトに)に実践投入すること。新しい仕組みも実際に使ってみてこそ価値があると思う。

  • *1: Aspect-Oriented Programming
  • *2: Object Oriented Programming
  • *3: European Conference for Object-Orientedのこと。OOに関する国際会議としてはOOPSLA(Object-Oriented Programming, Systems, Languages, and Applications)と並ぶ最高峰の舞台である
  • *4: PDFがダウンロードできる

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/131
Trackbacks
このエントリにトラックバックはありません
Local Trackbacks
昨日も書きましたが、今日から会社を3日ばかり休んで、神奈川県の葉山の某所で行われている研究室の合宿に参加してきます((発表とかは特にしないのでゲスト参加です))。僕が学部の時の研究室に夏合宿はなかったの...
(2004-08-09)
INTERNET Watchによるとアラン・ケイ博士がACM((Association for Computing Machinery))のチューリング賞を受賞することになったらしい。なんか、とっくにもらっているような気がしていたのだが、そうじゃなかっ...
(2004-04-21)
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン