横断的関心事: Crosscutting Concern †関心事(Concern) †開発者がひとつのまとまりとして考えるもののことで, 通常はソフトウェアの機能や品質など, 開発者がソフトウェアに作り込む要素を指します. 「ひとつのまとまりとして考える」単位は,開発者の判断に依存します. たとえば「画面の描画」や「データベースへのアクセス」,「応答性能」など,開発者が名前を付けて取り扱おうとしているものは,それぞれ関心事であるといえます. 関心事は,それぞれが明確に独立しているわけではなく,他の関心事と重複する部分があったり,ある関心事が他の関心事に依存していたりすることもあります. 関心事という言葉については,Gregor Kiczales による AOSD-discuss メーリングリストへの2003年の投稿も参照してください. Summary: concern is a broad term and should be kept as such aspect does not mean concern, an aspect is a particular kind of concern To keep it simple, I say a concern is anything about the software that I want to be able to think about as a relatively well-defined entity. http://aosd.net/pipermail/discuss_aosd.net/2003-February/000425.html 「feature」との違い †feature という言葉もソフトウェアが持つ機能のことを指して使われますが, こちらはユーザ(要求仕様)側から見たソフトウェアの機能のことを指し, 開発者視点である「関心事」と区別します. 横断的関心事(Crosscutting Concern) †「相互に関連しあっていて,何か機能変更などがあった場合に 同時に変更されるものは,できるだけ1つのモジュールにまとめておきたい」 という要求がありますが, 何らかの理由でモジュールとしてまとめられない 関心事のことを横断的関心事と呼んでいます. 従来,ソフトウェアの機能に基づいてモジュール分割を行うことが多いため, 性能向上のためのコードや,ログ取得などの付加的な処理は横断的関心事になりやすいといわれています(ソフトウェアファクトリーでは,機能特性に対して運用特性という表現も使われています). 通常のビジネスロジックなど,ベースとなる部分 (既存のモジュール機構でまとめるもの)については "本質" (Core Concern) などと呼び,区別する場合があります. また,研究者によっては,本質的な部分のことをベースレベル, アスペクトの部分をメタレベルと呼ぶ場合があります. 特に,ベースレベルのプログラム部分を指してベースレベルコード,ベースコード などと呼ぶ場合があります.(Fragile Base Code Problemなど) 横断的関心事の分類 †Homogeneous vs. Heterogeneous †この区分は,次の論文に登場したものです. Colyer, A. and Clement, A.: Large-Scale AOSD for Middleware. Proceedings of the 3rd International Conference on Aspect-Oriented Software Development (AOSD 2004), pp.56-65, Lancaster, UK, March 2004. http://doi.acm.org/10.1145/976270.976279 Homogeneous aspect は複数のジョインポイントで同じアドバイスを動かすもの, Heterogeneous aspect は異なるアドバイスを動かすもの,という区別です. プログラムの実行をトレースするアスペクトなど, 同じコードをあちこちにコピーして実現するような処理は Homogeneous に分類されます. 以下の文献では,Homogeneous crosscuts のカプセル化に対するサポートがアスペクト指向の 強みである一方で,アスペクトでは Heterogeneous crosscuts を扱いにくいと述べられています. Sven Apel, Thomas Leich, Gunter Saake Aspectual Mixin Layers: Aspects and Features in Concert Proceeding of the 28th International Conference on Software Engineering (ICSE 2006), pp.122-131, Shanghai, China, May 2006 http://doi.acm.org/10.1145/1134285.1134304 役割による分類 †この分類は,次の書籍で説明されているものです. Ivan Kiseleve: "Aspect-Oriented Programming with AspectJ", Sams Publishing, ISBN 0-672-32410-5
上記のうち,Development Aspects とRuntime Aspects は, ある程度 Java に慣れたプログラマならば簡単に導入することが可能であるため, 各所で使用されているようです.逆に,用途が限定されるために, 「アスペクト指向はロギングしかできない」との声も聞かれます. 静的 vs. 動的 †ジョインポイントとしてソースコードの構造などの静的な情報を用いるものと, プログラムの実行中のイベントのような動的情報を用いるものを, 静的な横断(static crosscutting),動的な横断(dynamic crosscutting) という名前で区分します. ApsectJ の場合は,インタータイプ宣言を用いた静的な横断に ポイントカット+アドバイスが動的な横断に対応します.
|