アスペクト指向言語のための 独立性の高いパッケージシステム 理学部 情報科学科 指導教員: 千葉 滋 学籍番号: 03-03150 今吉 竜之介 1 Javaパッケージシステム プログラムをモジュール化 する機構 class 一貫した処理は一つの パッケージに所属 パッケージは再利用の単位 class 外部からはパッケージの インターフェイスを通してのみ アクセス可能 パッケージ内部の挙動を保障 パッケージ class class class インターフェイス × class class × class 2 アスペクトはパッケージの モジュール性を破壊 アスペクトの織り込みに対する 制御は存在しない アスペクトはインターフェイスを 無視することが可能 class class aspect class class class class aspect class パッケージ内部のアスペクトが 外部に影響を及ぼす ポイントカットが一致すれば どこにでもウィーブされる ポイントカット記述にワイルド カードが使用された場合 3 規律あるアスペクトの織り込み ジョインポイントの選択に 対してパッケージ単位で 範囲を規定する パッケージ外のジョインポイント は選択不可 ワイルドカードによる誤った 選択を防ぐ 明示すれば選択範囲を 拡大可能 class class aspect × class class class aspect class × class インターフェイスに対する アスペクトとジョインポイントが アドバイス 同一パッケージ内にあれば許可 公開ポイントカット 選択可能な 範囲 4 インターフェイスに対する アドバイス 特定のクラスメンバへの 外部からのアクセス全て に作用させるアドバイス 外部から見ればそのアドバ イスはインターフェイスと 見なせる 外部の特定のパッケージ を指定することは不可 明示的に記述する必要が あるため、予期せぬ 織り込みにはならない class class aspect × class class class aspect class 特定のクラスメンバへのアクセスを 選択するポイントカットに [&& !within(自パッケージ)]を 追記することでパッケージ外部に作用可能 5 公開ポイントカット 公開されたポイントカットを 用いればパッケージ外部へ アクセス可能 抽象アスペクトを継承する ことで親アスペクトのポイント カットを利用可能 継承したポイントカットを利用 するときは親アスペクトと 同一パッケージと見なす 親として指定されるアスペクト は抽象アスペクトでなければ ならない 公開側も継承側も明示的な 宣言が必要 class class class class class 抽象 aspect aspect class 抽象アスペクトを継承すれば 親アスペクトのポイントカットを 利用可能 6 実装 Aspect Info Advice Weaving を拡張 AspectJ言語を拡張して制限を追加 実装にはabc(AspectBench Compiler)を 改造 初期コード数:92099行 / 追加コード数:581行 abcでは、全てのジョインポイントは そこに織り込まれるアドバイスのリストを保持 織り込む直前に、そのリストにある全ての アスペクトの情報をチェック 所属パッケージ、親アスペクトの有無など パッケージ制限のルールに適していなければ、 そのアドバイスはリストから除外 全てのジョインポイントに対して同様の処理を 実行 インタータイプ宣言にも同様のルールを追加 7 実験:AJHotDrawの移殖 パッケージ制限によるアスペクトの 情報の変化を計測 対象: AJHotDraw アスペクト指向で設計されたDrawing Tool コード数:41903行 / ファイル数:300個 パッケージ制限下でも正しく動作するよう にアスペクトを修正 ・アスペクトを含むパッケージ数 ・アスペクトのファイル数 ・アドバイスの数 ・インタータイプ宣言の数 ・ウィーブの合計数 修正前 修正後 3 10 5 31 44 7 17 5 31 44 ・ 修正後はアスペクトの数が増加 ・ 作用するアスペクトを探す手間は 減少 8 実験:コンパイル時間の比較 abcとパッケージ制限付きabcで コンパイルした際の時間を計測 ソースはAJHotDrawを使用 パッケージ制限下では コンパイルエラー 修正前のソースにはパッケージを またぐアスペクトが存在 修正前のソース 修正後のソース 実験環境 CPU: AMD Athlon 64 2.20GHz メモリ: 2GB OS: Windows XP SP2 Java SDK: 1.5.0 abc: 1.2.1 abc パッケージ制限付きabc 42.8(s) 42.3(s) コンパイルエラー 42.5(s) ・オーバーヘッドは 約0.3% ・十分実用的な 速度 9 関連研究 本研究はアスペクトの選択可能なジョインポイントの 範囲を制限するアプローチ プログラムをアスペクトの進入から守るアプローチ 織り込みの影響を制御するアプローチ Open Modules [Aldrich et al. ’06]、ccJava [境ら ’06] COW [篠塚ら ’05]、Impact Analysis of Weaving [Hideaki et al. ’05] 織り込みの見せ方を改善するアプローチ XPI [William et al. ’06]、AAIF [Kiczales et al. ’05] 10 まとめと今後の課題 まとめ 規律あるアスペクトの織り込み方法を提案 明示的に選択可能な範囲を拡大する方法を提案 abc(AspectBench Compiler)を改造して実装 アスペクト指向で設計されたAJHotDrawを移殖 今後の課題 ルールの洗練 パッケージをまたぐようなクラスの継承がある場合の ジョインポイントの選択方法など ケーススタディの充実 ファイル数だけでなく、アドバイスやインタータイプ宣言が 増加する例の発見 11
© Copyright 2024 ExpyDoc