様々なアスペクト指向をモデル化する パラメータ化インタプリタ

様々な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