様々なアスペクト指向メカニズムのモデル化を 支援するパラメータ化インタプリタ 九州工業大学情報工学部 森山 元喜 鵜林 尚靖 火の国シンポジウム2005 2005.3.8 1 発表内容 背景 目的 アスペクト指向 3パートモデル化フレームワーク パラメータ化インタプリタ 評価 まとめ 2 背景 システムの不十分なモジュール化による問題 横断的関心事:モジュール間にまたがる機能 システムの保守・改変が困難になる場合がある 例:ログ処理,認証機能,永続化 オブジェクト指向の限界 機能要件のモジュール化には適しているが, 横断的関心事の表現には必ずしも向いていない アスペクト指向 横断的関心事をどう表現するかにより,アスペクト 指向のメカニズムは大きく異なる 3 目的 様々なアスペクト指向メカニズムを パラメータを用いて共通にモデル化する アスペクト指向メカニズムの理解 言語開発のプロトタイピングに利用 4 アスペクト指向 モジュール化機構 システム本来の関心事と横断的関心事とを 分離する手法 横断的関心事とは・・・ 5 横断的関心事(ログ処理の例) 複数のオブジェクトにまたがる (Crosscutting Concerns) org.apache.tomcat におけるログ処理 – 赤い線はログ処理を行うコードを示す – 1箇所ではない – 数多くの場所に分散している AspectJ. http://eclipse.org/aspectj/より抜粋 6 アスペクト指向(続き) 横断的関心事を1つのモジュール(アスペクト)と して記述 システム本来の関心事とアスペクトとを織り込む ことで1つのプログラムを作る 織り込みのメカニズムは,JPM(Join Point Model)によって表現される 7 JPM(Join Point Model) ジョインポイント 織り込み対象になり得る箇所 織り込みたい箇所を全ジョインポイントから絞り込 む機能 絞り込んだ箇所に影響を与える機能 8 JPMの例(AspectJ) ジョインポイント:メソッド呼び出し 絞り込み機能:ポイントカット 影響を与える機能:アドバイス ・・・・・・・ ・・・・・・・ method1(...); method2(…); method3(…); ・・・・・・・ ・・・・・・・ ポイントカット method1 method3 コードの挿入 システム本来の関心事 を記述したプログラム アドバイス logger.log() アスペクト プログラム 9 代表的な言語毎のJPM AspectJ:PARC(Palo Alto Research Center)で開発 現在はEclipseプロジェクトに移管 Demeter:Northeastern大学で開発 PA(pointcut and advice) OC(open classes) TRAV(traversal specifications) Hyper/J:IBM T.J Watson Research Centerで開発 COMPOSITOR(class hierarchy composition) 10 JPM 横断的関心事をどう表現するかによって,様々 なJPMがある PA,TRAV,COMPOSITOR,OC しかも,JPMはそれぞれ大きく異なる アスペクト指向メカニズムの共通点は何か? 11 3パートモデル化フレームワーク 様々なJPMを統一的に理解するための枠組み 増原,Kiczalesが提案(ECOOP 2003) いくつかのパラメータを用いて織り込みプロセス を表現することによりJPMをモデル化 ジョインポイント:織り込みプロセス中の箇所 12 PAのモデル化 プログラムA (本来の関心事) プログラムB (横断的関心事) アドバイス宣言 メソッド宣言 織り込み 織り込みの結果 (計算) メソッド呼び出し (ジョインポイント) ジョインポイントは織り込みプロセス中 2つのプログラムを1つに織り込む 13 3パートモデル化フレームワーク パラメータを用いてJPMを共通にモデル化 A B X XJP A, B: 入力プログラム X: 織り込みの結果(計算 or プログラム) XJP: ジョインポイント(織り込みプロセス中の箇所) AID, BID: XJPに関係するプログラム要素の識別 AEFF, BEFF: 識別された要素による影響 14 3パートモデル化フレームワーク パラメータが示す内容は形式的ではない PA A: メソッド宣言 X: 計算 AID: メソッドの検索 BID: ポイントカット B: アドバイス宣言 XJP: メソッド呼び出し AEFF: メソッドの実行 BEFF: アドバイスの実行 ASB(Aspect Sand Box) ブリティッシュコロンビア大学で開発 3パートモデル化フレームワークに基づいたインタプリタ JPM毎にインタプリタを提供(インタプリタ群) 概念的パラメータに基づいて構築 15 JPMを導入する事を考えると JPMを導入する場合,形式的なパラメータが必要 概念的パラメータに基づく導入は困難 必要な処理とそのインタフェースが定まっていれば容易 X-ASB(eXtensible Aspect Sand Box) パラメータの形式化 ASBを拡張性の高いものに再構成 16 パラメータ化インタプリタ(X-ASB) Scheme(関数型言語)で記述 X-ASBの構成 JPMに共通な構造 JPMによって異なるパラメータ群 共通な構造 パーサ 抽象構文木の要素 式を評価する手続き PA CM OC TRAV パラメータ群 共通構造 X-ASBの概要 17 X-ASBパラメータ パラメータの形式化(手続きを設定) 括弧付きのパラメータは手続き 18 X-ASBパラメータ 織り込みを行う上で重要なパラメータ ジョインポイントに関わる要素を識別する方法(AID, BID) 識別した要素による影響を生じさす方法(AEFF, BEFF) 上記をいかに織り込むか(X) ジョインポイントに対応する織り込み発生箇所(X) パラメータに,JPMに適した手続きを設定 識別を行う手続き(lookup-a, lookup-b) 影響を生じさす手続き(effect-a, effect-b) 要素の織り込みを行う手続き(computation-at-jp) プログラム実行を行う手続き(eval-program) 19 X-ASBパラメータ effect-b effect-a lookup-b lookup-a eval-program computation-at-jp ジョインポイントによってlookup-a/b, effect-a/bの組は定 まる ジョインポイントによって実行における織り込みの箇所は 定まる ジョインポイント毎にまとめて登録する(register-jp手続き) eval-programがジョインポイントに関係する実行箇所において, 織り込みに適したcomputation-at-jpを呼び出す JPMによって要素の織り込み方は定まる computation-at-jpが登録されているlookup-a/b,effect-a/bを コーディネートし,要素を織り込む 20 X-ASBの実行フロー 登録 プログラム実行 register-jp 以下を登録 ・ ジョインポイントの情報 ・ lookup-a/b 手続き ・ effect-a/b 手続き eval-program 実行がジョインポイントに到達する度, computation-at-jp手続きを呼び出す computation-at-jp 織り込み 登録されているlookup-a/b, effect-a/bを コーディネートし,要素を織り込む 21 評価 effect-a effect-b JPM毎のコード行数 全体に対して特化した部分の割合: 10~30% 22 まとめ パラメータ化インタプリタ(X-ASB)の提案 様々なJPMを共通構造とパラメータ群によりモデル化 パラメータにJPMに適した手続きを設定することで, そのメカニズムを導入できる PA CM OC パラメータ群 TRAV JPMに適した パラメータ 共通構造 今後の課題 他にどのようなJPMがあるのかを調べる パラメータを設定するだけでメカニズムを導入できるのか 23 24 TRAV プログラムから得られるオブジェクト木をトラバー スするメカニズム アスペクト トラバーサル仕様(目的のオブジェクトへのパス) visitor(目的のオブジェクトへの到達での振る舞い) 25 COMPOSITOR 独立した2つのプログラムをマージするメカニズム 支配関係はない(指定した関連に基づいてマージ) 26 OC あるクラスにメソッドを追加するメカニズム アスペクト 追加先のクラス名 実際に追加させたいメソッドの宣言 27
© Copyright 2024 ExpyDoc