様々なAOPメカニズムをモデル化する パラメータ化インタプリタ

Slides:



Advertisements
Similar presentations
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Advertisements

メタモデル記述を用いた成果物間の依存関係追跡手法
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
中島 震,Reda Ahroum, Daniel Balouek (NII)
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
Dynamic AOPと その実装手法について
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
プログラム実行履歴を用いたトランザクションファンクション抽出手法
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
その他の図 Chapter 7.
組込みシステムの外部環境分析のためのUMLプロファイル
図書館職員のための アプリケーション開発講習会
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
複数個のJoinpointの集合を 対象としたPointcutを 記述可能なアスペクト指向言語
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
コードクローンの動作を比較するためのコードクローン周辺コードの解析
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
アスペクト指向言語のための 独立性の高いパッケージシステム
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
1-3 UMLの図(ダイアグラム) コンポーネント図 システムの物理的な構成を表現 ソフトウェアコンポーネントの依存性を表現
契約による クラスとアスペクト間の 影響解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
UMLの概要とオブジェクト指向の基本概念
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
拡張可能なアスペクト指向モデリングにおける織り合わせの検証
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
保守請負時を対象とした 労力見積のためのメトリクスの提案
dcNavi:デバッグ支援のための グラフベース推薦システム
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
データ中心システム設計方法論“DATARUN” 
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

様々なAOPメカニズムをモデル化する パラメータ化インタプリタ 九州工業大学4年 森山 元喜 九州工業大学 鵜林 尚靖  東京大学 玉井 哲雄 2005.3.10 PPL2005

発表の流れ 背景 目的 アスペクト指向のメカニズム 3パートモデル化フレームワーク パラメータ化インタプリタ(X-ASB) 評価 まとめ

背景 アスペクト指向プログラミング(AOP) システムの不十分なモジュール化による問題 横断的関心事:モジュール間にまたがる機能 システムの保守・改変が困難になる場合がある 横断的関心事:モジュール間にまたがる機能 ログ処理,認証機能,永続化 など オブジェクト指向の限界 機能要件のモジュール化には適しているが,   横断的関心事の表現には必ずしも向いていない 横断的関心事をどう表現するかにより,AOPのメカニズムは大きく異なる アスペクト指向プログラミング(AOP)

目的 様々なAOPメカニズムを パラメータを用いて共通にモデル化する AOPメカニズムの理解 言語開発におけるプロトタイピングに利用

AOP(Aspect-Oriented Programming) アスペクト指向: モジュール化機構 横断的関心事を1つのモジュール(アスペクト)として記述 システム本来の関心事とアスペクトとを織り込むことで1つのプログラムを作る 織り込みのメカニズムは,JPM(Join Point Model)によって表現される

JPM(Join Point Model) ジョインポイント 織り込みたい箇所を全ジョインポイントから絞り込む機能 アスペクト指向のメカニズム JPM(Join Point Model) ジョインポイント 織り込み対象になり得る箇所 織り込みたい箇所を全ジョインポイントから絞り込む機能 絞り込んだ箇所に影響を与える機能

JPMの例(AspectJ) ジョインポイント:メソッド呼び出し 絞り込み機能:ポイントカット 影響を与える機能:アドバイス アスペクト指向のメカニズム JPMの例(AspectJ) ジョインポイント:メソッド呼び出し 絞り込み機能:ポイントカット 影響を与える機能:アドバイス ・・・・・・・ method1(...); method2(…); method3(…); ポイントカット 絞り込み method1 method3 アドバイス コードの挿入 logger.log() ベースプログラム (システム本来の関心事) アスペクト プログラム

代表的な言語毎のJPM AspectJ:PARC(Palo Alto Research Center)で開発 アスペクト指向のメカニズム 代表的な言語毎のJPM AspectJ:PARC(Palo Alto Research Center)で開発           現在はEclipseプロジェクトに移管 PA(pointcut and advice) OC(open classes) Demeter:Northeastern大学で開発 TRAV(traversal specifications) Hyper/J:IBM T.J Watson Research Centerで開発 COMPOSITOR(class hierarchy composition)

TRAV ベースプログラムから得られるオブジェクト木をトラバースするメカニズム アスペクト トラバーサル仕様(目的のオブジェクトへのパス) アスペクト指向のメカニズム TRAV ベースプログラムから得られるオブジェクト木をトラバースするメカニズム アスペクト トラバーサル仕様(目的のオブジェクトへのパス) visitor(目的のオブジェクトへの到達での振る舞い)

COMPOSITOR 独立した2つのプログラムをマージするメカニズム 支配関係はない(指定した関連に基づいてマージ) アスペクト指向のメカニズム COMPOSITOR 独立した2つのプログラムをマージするメカニズム 支配関係はない(指定した関連に基づいてマージ)

アスペクト指向のメカニズム OC あるクラスに属性を追加するメカニズム アスペクト 追加先のクラス名 追加させたい属性の宣言

JPM 横断的関心事をどう表現するかによって,様々なJPMがある しかも,JPMはそれぞれ大きく異なる アスペクト指向のメカニズム JPM 横断的関心事をどう表現するかによって,様々なJPMがある PA,TRAV,COMPOSITOR,OC しかも,JPMはそれぞれ大きく異なる アスペクト指向メカニズムの共通点は何か?

3パートモデル化フレームワーク 様々なJPMを統一的に理解するための枠組み 増原,Kiczalesが提案(ECOOP 2003) いくつかのパラメータを用いて織り込みプロセスを表現することによりJPMをモデル化 ジョインポイント:織り込みプロセス中の箇所

PAのモデル ジョインポイント 織り込みプロセス中のメソッド呼び出し 3パートモデル化フレームワーク プログラムA プログラムB (本来の関心事) プログラムB (横断的関心事) アドバイス 実行 メソッド 実行 メソッド宣言 アドバイス宣言 ポイントカット メソッド 検索 織り込み メソッド呼び出し (ジョインポイント) 織り込みの結果 (計算) ジョインポイント 織り込みプロセス中のメソッド呼び出し

OCのモデル ジョインポイント プログラムへ宣言を設定する箇所 3パートモデル化フレームワーク プログラムA プログラムB (本来の関心事) (横断的関心事) 該当クラスへの複写 クラス宣言 クラスの設定 オープンクラス 宣言 オープンクラス 検索 クラス 検索 織り込み 宣言の設定 (ジョインポイント) 織り込みの結果 (プログラム) ジョインポイント プログラムへ宣言を設定する箇所

3パートモデル化フレームワーク 2つの入力プログラムを1つに織り込む パラメータを用いてモデル化 A B BEFF AEFF BID AID (影響) AEFF BID AID (識別) 織り込み XJP X 2つの入力プログラムを1つに織り込む パラメータを用いてモデル化

3パートモデル化フレームワーク パラメータが示す内容は形式的でない ASB(Aspect Sand Box) PAへのパラメータの適用 A: メソッド宣言     B: アドバイス宣言 X: 計算         XJP: メソッド呼び出し AID: メソッドの検索  AEFF: メソッドの実行 BID: ポイントカット   BEFF: アドバイスの実行 ASB(Aspect Sand Box) UBCで開発 3パートモデル化フレームワークに基づいたインタプリタ JPM毎にインタプリタを提供(インタプリタ群) 概念的パラメータに基づいて構築

JPMを導入する事を考えると ある程度形式的なパラメータが必要 X-ASB(eXtensible Aspect Sand Box) 形式的でないパラメータに基づく導入は困難 必要な処理と導入手順が定まっていれば容易 X-ASB(eXtensible Aspect Sand Box) パラメータの形式化 ASBを拡張性の高いものに再構成

パラメータ化インタプリタ(X-ASB) Schemeで記述 X-ASBの構成 共通な構造 JPMに共通な構造 パーサ パラメータ同士の関係 共通構造 パラメータ群 PA CM OC TRAV X-ASBの概要

X-ASBパラメータ 概念的パラメータの形式化(手続きを設定) 括弧でくくられたものは手続き

X-ASBパラメータ 織り込みを行う上で重要なパラメータ パラメータに,JPMに適した手続きを設定 ジョインポイントに関わる要素を識別する方法(AID, BID) 識別した要素による影響を生じさす方法(AEFF, BEFF) 上記をいかに織り込むか(X) 織り込み発生箇所(X) パラメータに,JPMに適した手続きを設定 lookup-a, lookup-b: 識別を行う effect-a, effect-b: 影響を生じさす computation-at-jp: 要素の織り込みを行う eval-program: プログラムを実行する

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をコーディネートし,要素を織り込む

X-ASBの実行フロー register-jp 以下を登録 登録 ・ ジョインポイント情報 ・ lookup-a/b 手続き ・ effect-a/b 手続き 登録 プログラム実行 eval-program 実行がジョインポイントに到達する度, 適したcomputation-at-jp手続きを呼び出す computation-at-jp 登録されているlookup-a/b, effect-a/bを コーディネートし,要素を織り込む 織り込み

JPM導入手順 ジョインポイントとして何を捉えるのかを定め,識別,実行できる手続きを設定する 識別,影響の手続きをどうコーディネートするかを定めたcomputation-at-jp手続きを設定する プログラム実行中のどの箇所でcomputation-at-jpを呼び出すかを踏まえeval-programを設定する

評価①:JPM導入について effect-a effect-b JPM毎のコード行数 全体に対して特化した部分の割合: 10~30%

評価②:JPM拡張について 導入済のJPMと同様のcomputation-at-jpにより織り込みを行うJPMは,拡張の形で導入 フィールド値設定の箇所を捉える(FSET) フィールド値参照の箇所を捉える(FGET) 以下の箇所をPAにおいて捉えられる メソッド呼び出し フィールド値設定 フィールド値参照 PAを拡張

評価②:JPM拡張について 全パラメータを設定しなくても良い パラメータ全体に対する拡張分の割合:約22% effect-a effect-b 全パラメータを設定しなくても良い パラメータ全体に対する拡張分の割合:約22%

まとめ パラメータ化インタプリタ(X-ASB)の提案 共通構造とパラメータ群によりモデル化 パラメータの形式化 JPMに適したパラメータを設定することで,メカニズムを導入できる JPM拡張は純粋な導入よりも容易 共通構造 パラメータ群 JPMに適した パラメータ PA CM OC TRAV

ジョインポイント構造 call-jp構造 lookup-method, lookup-advice execute-method, execute-advice mname, target, args

3パートモデル化フレームワーク 3パートモデル化フレームワーク JPMへのパラメータの適用

X-ASBパラメータの適用 パラメータにはJPMに対応した手続きを設定 METAには,織り込みポリシーを設定 computation-at-jpはMETAに沿った織り込みを行う

3パートモデル化フレームワーク A B XJP X AID BID AEFF BEFF パラメータを用いてJPMを共通にモデル化 A, B: 入力プログラム X: 織り込みの結果(計算 or プログラム) XJP: ジョインポイント(織り込みプロセス中の箇所) AID, BID: XJPに関係するプログラム要素の識別 AEFF, BEFF: 識別された要素による影響 (META: 織り込みのメタ情報) A B XJP X AID BID AEFF BEFF

現状の問題 JPMを導入する場合,形式的なパラメータが必要 X-ASB(eXtensible Aspect Sand Box) 概念的パラメータに基づく導入は困難 必要な処理とそのインタフェースが定まっていれば容易 X-ASB(eXtensible Aspect Sand Box) 概念的パラメータの形式化 ASBを拡張性の高いものに再構成

単一インタプリタの構築 (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 ...)))))