様々なAOPメカニズムをモデル化する パラメータ化インタプリタ 九州工業大学4年 森山 元喜 九州工業大学 鵜林 尚靖 東京大学 玉井 哲雄 PPL2005 2005.3.10 1 発表の流れ 背景 目的 アスペクト指向のメカニズム 3パートモデル化フレームワーク パラメータ化インタプリタ(X-ASB) 評価 まとめ 2 背景 システムの不十分なモジュール化による問題 横断的関心事:モジュール間にまたがる機能 システムの保守・改変が困難になる場合がある ログ処理,認証機能,永続化 など オブジェクト指向の限界 機能要件のモジュール化には適しているが, 横断的関心事の表現には必ずしも向いていない アスペクト指向プログラミング(AOP) 横断的関心事をどう表現するかにより,AOPのメカ ニズムは大きく異なる 3 目的 様々なAOPメカニズムを パラメータを用いて共通にモデル化する AOPメカニズムの理解 言語開発におけるプロトタイピングに利用 4 AOP(Aspect-Oriented Programming) アスペクト指向: モジュール化機構 横断的関心事を1つのモジュール(アスペクト)と して記述 システム本来の関心事とアスペクトとを織り込む ことで1つのプログラムを作る 織り込みのメカニズムは,JPM(Join Point Model)によって表現される 5 JPM(Join Point Model) アスペクト指向のメカニズム ジョインポイント 織り込み対象になり得る箇所 織り込みたい箇所を全ジョインポイントから絞り 込む機能 絞り込んだ箇所に影響を与える機能 6 JPMの例(AspectJ) アスペクト指向のメカニズム ジョインポイント:メソッド呼び出し 絞り込み機能:ポイントカット 影響を与える機能:アドバイス ・・・・・・・ ・・・・・・・ method1(...); method2(…); method3(…); ・・・・・・・ ・・・・・・・ ポイントカット method1 method3 コードの挿入 ベースプログラム (システム本来の関心事) アドバイス logger.log() アスペクト プログラム 7 代表的な言語毎の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) 8 TRAV アスペクト指向のメカニズム ベースプログラムから得られるオブジェクト木をト ラバースするメカニズム アスペクト トラバーサル仕様(目的のオブジェクトへのパス) visitor(目的のオブジェクトへの到達での振る舞い) 9 COMPOSITOR アスペクト指向のメカニズム 独立した2つのプログラムをマージするメカニズム 支配関係はない(指定した関連に基づいてマージ) 10 OC アスペクト指向のメカニズム あるクラスに属性を追加するメカニズム アスペクト 追加先のクラス名 追加させたい属性の宣言 11 JPM アスペクト指向のメカニズム 横断的関心事をどう表現するかによって,様々 なJPMがある PA,TRAV,COMPOSITOR,OC しかも,JPMはそれぞれ大きく異なる アスペクト指向メカニズムの共通点は何か? 12 3パートモデル化フレームワーク 様々なJPMを統一的に理解するための枠組み 増原,Kiczalesが提案(ECOOP 2003) いくつかのパラメータを用いて織り込みプロセス を表現することによりJPMをモデル化 ジョインポイント:織り込みプロセス中の箇所 13 PAのモデル プログラムA (本来の関心事) 3パートモデル化フレームワーク プログラムB (横断的関心事) アドバイス宣言 メソッド宣言 織り込み 織り込みの結果 (計算) メソッド呼び出し (ジョインポイント) ジョインポイント 織り込みプロセス中のメソッド呼び出し 14 OCのモデル 3パートモデル化フレームワーク プログラムB (横断的関心事) プログラムA (本来の関心事) オープンクラス 宣言 クラス宣言 織り込み 織り込みの結果 (プログラム) 宣言の設定 (ジョインポイント) ジョインポイント プログラムへ宣言を設定する箇所 15 3パートモデル化フレームワーク 3パートモデル化フレームワーク A B BEFF (影響) AEFF AID BID (識別) 織り込み X XJP 2つの入力プログラムを1つに織り込む パラメータを用いてモデル化 16 3パートモデル化フレームワーク 3パートモデル化フレームワーク パラメータが示す内容は形式的でない PAへのパラメータの適用 A: メソッド宣言 X: 計算 AID: メソッドの検索 BID: ポイントカット B: アドバイス宣言 XJP: メソッド呼び出し AEFF: メソッドの実行 BEFF: アドバイスの実行 ASB(Aspect Sand Box) UBCで開発 3パートモデル化フレームワークに基づいたインタプリタ JPM毎にインタプリタを提供(インタプリタ群) 概念的パラメータに基づいて構築 17 JPMを導入する事を考えると ある程度形式的なパラメータが必要 形式的でないパラメータに基づく導入は困難 必要な処理と導入手順が定まっていれば容易 X-ASB(eXtensible Aspect Sand Box) パラメータの形式化 ASBを拡張性の高いものに再構成 18 パラメータ化インタプリタ(X-ASB) Schemeで記述 X-ASBの構成 JPMに共通な構造 JPMによって異なるパラメータ群 共通な構造 パーサ パラメータ同士の関係 PA CM OC TRAV パラメータ群 共通構造 X-ASBの概要 19 X-ASBパラメータ 概念的パラメータの形式化(手続きを設定) 括弧でくくられたものは手続き 20 X-ASBパラメータ 織り込みを行う上で重要なパラメータ ジョインポイントに関わる要素を識別する方法(AID, BID) 識別した要素による影響を生じさす方法(AEFF, BEFF) 上記をいかに織り込むか(X) 織り込み発生箇所(X) パラメータに,JPMに適した手続きを設定 lookup-a, lookup-b: 識別を行う effect-a, effect-b: 影響を生じさす computation-at-jp: 要素の織り込みを行う eval-program: プログラムを実行する 21 X-ASBパラメータ ジョインポイントによってlookup-a/b, effect-a/bの 組は定まる ジョインポイントによって実行における織り込みの 箇所は定まる 4つを一組で登録する(register-jp手続き) eval-programがジョインポイントに関係する実行箇所 において,織り込みに適したcomputation-at-jpを呼び 出す JPMによって要素の織り込み方は定まる computation-at-jpが登録されているlookup-a/b, effect-a/bをコーディネートし,要素を織り込む 22 X-ASBの実行フロー 登録 プログラム実行 register-jp 以下を登録 ・ ジョインポイント情報 ・ lookup-a/b 手続き ・ effect-a/b 手続き eval-program 実行がジョインポイントに到達する度, 適したcomputation-at-jp手続きを呼び出す computation-at-jp 織り込み 登録されているlookup-a/b, effect-a/bを コーディネートし,要素を織り込む 23 JPM導入手順 ジョインポイントとして何を捉えるのかを定め,識 別,実行できる手続きを設定する 識別,影響の手続きをどうコーディネートするかを 定めたcomputation-at-jp手続きを設定する プログラム実行中のどの箇所でcomputation-atjpを呼び出すかを踏まえeval-programを設定する 24 評価①:JPM導入について effect-a effect-b JPM毎のコード行数 全体に対して特化した部分の割合: 10~30% 25 評価②:JPM拡張について 導入済のJPMと同様のcomputation-at-jpにより 織り込みを行うJPMは,拡張の形で導入 フィールド値設定の箇所を捉える(FSET) フィールド値参照の箇所を捉える(FGET) PAを拡張 以下の箇所をPAにおいて捉えられる メソッド呼び出し フィールド値設定 フィールド値参照 26 評価②:JPM拡張について effect-a effect-b 全パラメータを設定しなくても良い パラメータ全体に対する拡張分の割合:約22% 27 まとめ パラメータ化インタプリタ(X-ASB)の提案 共通構造とパラメータ群によりモデル化 パラメータの形式化 JPMに適したパラメータを設定することで,メカニズム を導入できる JPM拡張は純粋な導入よりも容易 PA CM OC TRAV パラメータ群 JPMに適した パラメータ 共通構造 28 29 ジョインポイント構造 call-jp構造 lookup-method, lookup-advice execute-method, execute-advice mname, target, args 30 3パートモデル化フレームワーク 3パートモデル化フレームワーク JPMへのパラメータの適用 31 X-ASBパラメータの適用 パラメータにはJPMに対応した手続きを設定 METAには,織り込みポリシーを設定 computation-at-jpはMETAに沿った織り込みを行う 32 3パートモデル化フレームワーク 3パートモデル化フレームワーク パラメータを用いてJPMを共通にモデル化 A B X XJP A, B: 入力プログラム X: 織り込みの結果(計算 or プログラム) XJP: ジョインポイント(織り込みプロセス中の箇所) AID, BID: XJPに関係するプログラム要素の識別 AEFF, BEFF: 識別された要素による影響 (META: 織り込みのメタ情報) 33 現状の問題 JPMを導入する場合,形式的なパラメータが必要 概念的パラメータに基づく導入は困難 必要な処理とそのインタフェースが定まっていれば容易 X-ASB(eXtensible Aspect Sand Box) 概念的パラメータの形式化 ASBを拡張性の高いものに再構成 34 単一インタプリタの構築 (define eval-program (lambda (pgm-a pgm-b) (let* ((pgm1 (compositor::eval-program pgm-a pgm-b)) (pgm2 (oc::eval-program (remove-oc-mdecls pgm1) (gather-oc-mdecls pgm1)))) (pa::eval-program (extract-org-pgm pgm2) (extract-advice-decls pgm2))))) (define eval-exp (lambda (exp env) (cond .. ((method-call-exp? exp)(call-method ...)) ((traverse-exp? exp)(trav::eval-program ...))))) 35
© Copyright 2024 ExpyDoc