Document

アスペクト指向言語のための
独立性の高いパッケージシステム
理学部 情報科学科
指導教員: 千葉 滋
学籍番号: 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