アスペクト指向プログラミング

アスペクト指向プログラミング(アスペクトしこうプログラミング、Aspect Oriented Programming、AOP)は、オブジェクト指向ではうまく分離できない特徴(クラス間を横断 (cross-cutting) するような機能)を「アスペクト」とみなし、アスペクト記述言語をもちいて分離して記述することでプログラムに柔軟性をもたせようとする試みで、極端に言えば、あるプログラムFの本質とは無関係だが使うかもしれないプログラムGを、プログラムFを実行したときに割り込ませるような機能である。このプログラムGこそがアスペクトであり、これを別ファイルに分離し、処理系がディスパッチすることで、プログラムF以外を実行するときにもプログラムGを割り込ませることができる。

アスペクトの例としては、データ転送帯域の制限や例外の処理などがある。Javaにアスペクト指向的要素を追加したAspectJが実験的に実装されている。

オブジェクト指向プログラミングとは直交する(排他的ではなく、相補的な関係にある)プログラミングパラダイムである。つまり既存のプログラミングパラダイムを置き換えるものではなく、あくまで既存の言語の補助機能として利用されることを目的としている。例として、「本格的なオブジェクト指向言語」を謳う[1]プログラミング言語Rubyでも、アスペクト指向に影響を受けた機能を補完的に取り入れている[2]

主なアスペクト指向言語編集

主なアスペクト指向フレームワーク編集

用語編集

  • Aspect
  • Joinpoint
  • Advice
  • Pointcut

脚注編集

[脚注の使い方]
  1. ^ まつもと直伝 プログラミングのオキテ 第0回 あらためてRuby入門(基本と他言語との違い)”. 日経クロステック. 2020年12月18日閲覧。
  2. ^ Module#prependによってCLOS(CommonLisp Object System)のaround hookと同じように,あるメソッドの前後をフックして処理を行えるようになりました。これは以前注目されていた「アスペクト指向プログラミング」に近い振る舞いになります。https://gihyo.jp/news/report/01/rubykaigi2017/0002

関連項目編集

外部リンク編集

アスペクト指向が取り入れられている主なプロダクト