情報処理における学会と産業界というのは、かなり距離がある。
したがって、2つの間に関連性がありながら、
学界的に「それは違う」と排除してしまい、
産業界的にも、学界的にも、豊かな研究分野・実践を
踏みにじってしまうことがある。
そんな分野の1つ「アスペクト指向」を、今日はご紹介。
■学界的に、アスペクト指向は・・・
学界的には「アスペクト指向」というのがある。
オブジェクト指向では、いろいろなオブジェクトに共通して起きる
「横断的関心事」というのがある。
これに対処するため手法で、具体的には、
横断的に、プログラムを切って、
そこに「横断的関心事」のプログラムを差し込む。
たとえば、みんなでログを出したいとしたら、
各メソッドの呼び出し時に=プログラムを切って
そこにログの=「横断的関心事」の
プログラムを差し込む。
このとき、プログラムをきるところを「ジョインポイント」
といい、このジョインポイントをまとめたものを「ポイントカット 」
「横断的関心事」のプログラムを「アドバイス」という。
実行時には、もともとのプログラムに対して、ポイントカット部分に
来たら、アドバイスを実行することになるが、このように、
アドバイスのプログラムを差し込んでいくことを「ウィーブする」という
・・・めんどっちいなあ、ことばが・・・
ここが詳しい。
http://www.atmarkit.co.jp/farc/rensai/aspect02/aspect02b.html
■「横断的関心事」=「共通ルール」(機能要件の合意形成ガイド等)
で、この「横断的関心事」だけど、アスペクト指向の説明では
ログが好まれる。このほか、セキュリティ要件なども
「横断的関心事」とされている。
でもこれ、もっと簡単に言って、どんな機能でも守る「共通ルール」
のことだ。
たとえば、
どんな画面でも、全画面でエラーがあったら、エラーをここに表示!
日本語と英語の切り替えはいつでもできるようにするのよ!
とかの共通ルール。これは、アスペクト指向における
「横断的関心事」として処理できる。
Viewの表示直前を、ポイントカットして、
エラーがあったら表示、ロゴを表示、日本語英語チェックなどを
アドバイスすればよい。
共通ルールって言った途端に、実務よりの話になってくる。
画面の「レイアウト共通ルール」などは、
「機能要件の合意形成ガイド」とかにも出てくる
ただし、レイアウトの場合、共通ルールのすべてを横断的関心事に
するかというと・・・
でもまあ、共通ルールになっていることの多くは、「横断的関心事」だ
■ポイントカットと、CakePHPにおけるbeforeFilterなど
では、実装についてみてみよう。
アスペクト指向の場合、ウィーブするには、AOP対応の開発環境で
実現できる。Javaにおいては、eclipseは対応している。
では、実務上、共通ルールを、どうやって実装するか。
CakePHPの場合、画面自体は、
共通なレイアウトは、
default.thtml、cake.generic.cssというテンプレートやCSS
エレメント
コントローラーに来るときの共通処理として
beforeFileter
などによる実現が考えられると思う。
beforeFilter,afterFilterは、すべてのコントローラーをとおる。
したがって、この中で、対象となるものを選択して、実行すれば、
アスペクト指向と同じようなことができる。
ただし、Filterの種類は限定されている
(アスペクト指向のポイントカットタイプ程はない)
■JQueryの場合
JQueryのイベントは、
$(セレクター).イベント(function
となる
http://ascii.jp/elem/000/000/450/450276/
$(セレクター).イベント をジョインポイント、
(function をアドバイスと考えれば、
対応は付く。また、ジョインポイントは、
ポイントカットタイプとその引数(対象を表す)にわかれるが、
セレクターを引数部分、
ポイントカットタイプをイベントと考えれば、
用意されているポイントカットタイプとイベントは違うけど、
似たように考えられる。
この関連付けに文句のある人はたくさんいるだろう。
それはそれでよい。
ただし、
実務上では、共通ルールとして、ユニバーサルデザインが議論されたりする。
今回の説明で考えると、そのようなユニバーサルデザインがアスペクト指向
で取り組めることになる。
そのように、実務での話題を、学会で取り込めるようにするためには、
こういう関連付けは有意義かと思うし、それを辞めさせる必要性もないと思う。