Goodpic.com
2003年09月26日

オブジェクト指向の次、アスペクト指向プログラミングと分散環境

オブジェクト指向プログラミングを補う目的で、アスペクト指向と呼ばれる手法が実現化されつつある。分散コンピューティング環境での開発上の問題点を踏まえて、1995~97年頃に、米XeroxのPARCで基本が作られたようです。
c|netの記事「米IBMと米JBossが検討中の、新たなJava計画とは?」を読んで興味を持ったので、ちょっと調べてみました。


AOP(Aspect-Oriented Software Development)は、複雑なソフトウェアに明快なデザイン構造を与える方法を模索した結果として生まれた。当時、分散コンピューティングの発想にプログラマの懸念が高まっていた。計算処理アルゴリズムや基本的な機能を保ったままで、同時性、リアルタイム制約、ロケーション制御、永続性、障害復旧をいかにして扱うかで、開発者は頭を悩ませていた。
解決策をプログラム・コードにじかに組み込むと不必要に複雑になることが経験からわかっていたので、チームは一部の機能を基本プログラム・アルゴリズムから切り離す手段としてメタレベル・プログラミングに着眼した。メタオブジェクトは、オブジェクトが発するメッセージや受け取るメッセージを横から抜き取り、同期制約、リアルタイム設定、移行パラメータ、その他の要素の有無をチェックする。こうすることで、特別な機能に気をとられることなく、基本オブジェクトを書くことができる。

アスペクト指向プログラミングの成熟(Linux.com)」

この辺りは、分散プログラミングではなく普通のWEBアプリケーションをJavaで書いていても思い当たるケースが結構あるのでは。例えばログインが必要なページ(機能モジュール)が複数あって、ログイン状態の有無の判別とログイン処理を一つのパッケージにまとめることができても、ログインクラスのインスタンス化とメソッド呼び出しは、やはり分散した複数の機能モジュール単位で記述しなければいけない、など。色々な解説記事でも、他に分かりやすい例として、デバック用のログ記録なども例に挙げています。


AOPの先駆者たちは、このようなタイプの動作が特定のプログラミング・モデルの中で典型的な複数の役割分割をまたがって横切ることから、このような動作を横断 (crosscutting) と名付けました。たとえばオブジェクト指向プログラミングの場合、クラス単位でモジュール化するのが自然であり、複数のクラスにまたがる関心事が横断的関心です。横断的関心の例には、ロギング、コンテキストに依存したエラー処理、パフォーマンス最適化、デザイン・パターンなどがあります。(中略)
AOPはオブジェクト指向プログラミングを補います。AOPにおけるモジュール化は、広範囲にわたる横断的関心のインプリメンテーションをただ1つの単位にまとめ上げます。このような単位をアスペクト (様相) と呼び、ここからアスペクト指向プログラミングの名が生まれました。アスペクト・コードを区分けしていくと、横断的関心は扱いやすくなります。システムのさまざまなアスペクトをコンパイル時に変更、挿入、または除去できます。再使用さえ可能です。

アスペクト指向プログラミングで、モジュール性を改善する
AspectJおよび疑似オブジェクトによる柔軟なテスト」 

実際にアスペクト指向プログラミングをしてみたわけでは無いのですが、確かにオブジェクト指向を補う新しいステップのような気がします。ちょっと抽象的なイメージですが、オブジェクト指向では”あるモノの形と動作を定義”して、モノ同士の関係性からプログラムを構築する(現実世界もモノで出来上がっているので、メタファーとしてよく適合する)。アスペクト指向は、ある状態に対するリアクションを定義することで、より簡単に人や動物の行動を記述できるアフォーダンス理論的なアプローチを加えるような感じもします。アフォーダンスは、モノが人にアクションを起こさせる情報を提供している(アフォードしている)という表現なので、厳密には違うのかもしれませんが。アフォーダンスの解説では以下の書籍が非常にわかりやすくて面白いです。「アフォーダンス-新しい認知の理論
AOPの実装としては、PARCで開発されたAspectJというプロジェクトがEclipse(!)のプロジェクトとして移管、Java環境向けに開発されていています。AspectJに関しては以下のページが詳しいです。

The AspectJTM Programming Guide
AspectJ 環境を構築しよう
AspectJ Tips and Pitfalls 
AspectJ解説

Posted by jkanekomt at 2003年09月26日 14:35 | trackBack



Comments
Post a comment









Remember personal info?







関連記事