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

様々なアスペクト指向メカニズムのモデル化を
支援するパラメータ化インタプリタ
九州工業大学情報工学部
森山 元喜 鵜林 尚靖
火の国シンポジウム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