【コラム】
これまで7回に渡ってアスペクトについて説明し、そして4回はAspectJ 5について紹介してきた。今回はアスペクトやAspectJ 5を振り返ってまとめ、一旦これでアスペクト関係は終えようとおもう。
AOP(Aspect Oriented Programing)はシステムに渡って横断的に要求される機能を一カ所に「アスペクト」としてまとめておくプログラミング手法のことをいう。
システムをどんなにOOD(Object Oriented Design)にしたがってきれいに設計し実装したとしても、当初予定していなかった横断的な要求がシステムに対して生じることは、どうしても避けることができない。これはシステムにおけるある種の本質であり、どうにもならないとみられている。
AOPはこうした事実に対するひとつの取り組みであり、適材適所に用いれば効果を発揮できる。ただしJavaはOOP(Object Oriented Programing)の言語であって、AOPの言語ではない。JavaにおけるAOPはOOPを補完する目的で採用されている。
AOPのアイディアの本質は、横断的関心事を抜き出して一カ所にまとめておこうというものだ。つまり、AOPをうまく適用できるかどうかは、うまいこと横断的関心事を見極めて抜き出せるかどうかにかかっている。
AOPをうまく使っていくうえで知る必要があることには、アスペクトへ分離できないものもあるということ、アスペクトは注意深く使わないと衝突することもあること、アスペクトに頼りすぎるとソースコードレビューを困難なものにするかもしれないこと、本来の処理に影響を与えてしまうかもしれないこと、などだ。
実際の適用例をとりあげつつ、逆コンパイルを実施して、実際にどのような手順でアスペクトの織り込みが実現されているかも示した。基本的なことばかりだったが、あの程度の内容を把握できておければ十分だ。
AOPは便利な手法だが、Javaが依るところとしている手法はOOPであって、AOPではない。AOPは本質的にOOPを壊しかねない方法であって、頼りすぎることには問題がある。しかし、だからといって使わないというのも、それはそれで考えなければならない。AOPの方が適しているなら、AOPを使った方がよい。
まず、AOPを実施するにあたり、代替となるデザインパターンやフレームワーク、継承や委譲があるなら、まずそちらを採用した方がよい。JavaにおけるAOPはまだまだ補完的位置付けであって、AOPが主役になるようなことがあってはならない。
AOPを活用している開発者の多くが、すでにマイアスペクトとでも呼ぶべき自分専用のアスペクトを手元にもっており、デバッグの段階で活用している点は注目に値する。現段階では、AOPを適用するもっとも適したシーンだといえるだろう。
AOPを活用している開発者の多くが、すでにマイアスペクトとでも呼ぶべき自分専用のアスペクトを手元にもっており、デバッグの段階で活用している点は注目に値する。デバッグや実行時間測定といった用途は、システムを超えて同じような処理が必要とされるものであり、現段階では、AOPを適用するもっとも適したシーンだといえるだろう。
JavaはAOPには直接は対応していない。これはJavaの「可読性」「シンプルさ」「互換性」などを保つという目的において、Javaには適さないと判断されたからだとされている。
このため、現段階においてJavaでAOPを実現するには、外部のツールを活用する必要がある。実装はいくつもあるが、なかでも代表的な実装がAspectJ 5だ。AspectJはEclipse.org, The AspectJ projectのもとで開発され、Common Public License Version 1.0のもとで公開されているオープンソースソフトウェア。最新版は005年12月20日(米国時間)に公開されたAspectJ 5 - AspectJ Version 1.5.0である。
AspectJ 5ではJava SE 5で導入されたアノテーションを使って、Java本来のフォーマットでアノテーションが記述できるようになった特記すべきバージョンであり、Javaとも相性がよい。
特に@Before/@After/@Aroundアノテーションが代表的なもので、実例を採り上げて使い方や仕組みを説明してきた。少なくともこの3つのアノテーションをベースとして知っておけば、あとはマニュアルやサンプルを参考にしてAspectJ 5を使っていくことができるだろう。
今後Java本体においてAOPが取り込まれる予定はないことは何度も述べているが、ユーザの要望や開発手法の流行などによっては、どうなるかわからない。Eclipse IDEやNetBeans IDEを使った開発が主流になりつつある昨今、AspectJ 5を使ったデバッグコードの織り込みなどは、ユーザは意識しなくとも開発プラグインにおける必須事項として普及する可能性もある。
AOPは登場当初の騒がれ方を考えると、期待されるほどの普及には至っていない。しかしながら大切な考え方でもあり、特定の使用用途においては絶大な効果を発揮することもできる。今後もじわじわと現場のプログラマに浸透していくことになるといえるだろう。Javaプログラマであれば、使わないにしても、一回は体験しておくべきものといえるだろう。
さて、次回からは、サーバプログラミングに入りたいとおもう。JSP/Servletを基盤技術としたフレームワークに依ってサーバサイドプログラミングをおこなうことが主流になった現在、そもそもソケットを知らない開発者も増えているだろう。次回からは、ソケットなどの基盤技術について説明し、基本となる技術について説明や実装例を紹介していく。
過程でいくつかのWebアプリケーションフレームワークや、EJB 3.0についても言及することになるだろう。アノテーションはそれらを扱うときに再び登場することになる。
| ルネサス、バッテリチャージング機能搭載USB 2.0ハブコントローラを発表 [14:31 5/22] |
| ゲーム開発基盤Unity、iOS/Androidなどモバイル向け機能を完全無償化 [11:02 5/22] |
| 【レポート】どこでもサイエンス - ふわふわ風船の、He~なはなし [10:30 5/22] |
| TI、 タブレット端末の設計を簡素化する2つの新デバイスを発表 [09:30 5/22] |
| QEMU 1.5公開 - VGAパススルーとUSB 3.0対応 [09:29 5/22] |
|
アドバンスト・メディア、音声認識システムに自動車業界向け言語モデル開発 [14:38 5/22] エンタープライズ |
|
ルネサス、バッテリチャージング機能搭載USB 2.0ハブコントローラを発表 [14:31 5/22] 開発・SE |
|
前田敦子「自分の決めた仕事で輝く」-マイナビ転職第3弾プロモーション開始 [14:30 5/22] エンタメ |
|
胸の「S」の意味が明らかに! -映画『マン・オブ・スティール』予告映像公開 [14:30 5/22] エンタメ |
|
エッチな人はハゲるって本当ですか? 髪にまつわる8つのギモン [14:27 5/22] キャリア |