Document

開発者との対話を活かした
横断的構造の表現
理学部
情報科学科
指導教官 千葉 滋 助教授
学籍番号 03_17286 戸部 敦
学士論文発表会
1
アスペクト指向

横断的関心事をモジュール化する技術
 クラスのソースコード上から横断的関心事を分離

アスペクトに横断的関心事をまとめる
 アスペクトには実行するタイミングと実行するコードを記述
class Line impl. Shape {
Point p1, p2;
void setP1(int x, int y){
p1.setX(x);
p1.setX(x);
…
ジョインポイント
織り込み(Weave)
アドバイス
@Glue class Update {
@After(“ Display.update(); ”)
Pointcut change =
Pcd.call(“* Shape+.set*(..)”);
…
GluonJ での例
学士論文発表会
ポ
イ
ン
ト
カ
ッ
ト
2
横断的構造の可視化ツール

アスペクト指向言語の obliviousness にまつわる問題




ソースコード上からクラスとアスペクトの関係が読み取れない
fragile pointcut 問題
 クラスの変更がアスペクトの織り込みに予期しない悪影響を与える
意図しないジョインポイントが選択される問題
可視化ツールによって問題の回避を支援
class Line impl. Shape {
Point p1, p2;
void setP1(int x, int y){
p1.setX(x);
p1.x
= x;
…
@Glue class Update {
@After(“ Display.update(); ”)
Pointcut change =
Pcd.call(“* Shape+.set*(..)”);
…
学士論文発表会
3
C&Y の提案

横断的構造を視覚的に表示

クラスに注目した表示


アスペクトに注目した表示


選択したクラスに影響を与えるアスペクトを表示
選択したアスペクトがアドバイスを織り込むクラスを表示
クラス図を用いて横断的構造を視覚化

クラス図は含められる情報が多い


例) 使用関係、継承関係
簡易表示機能によってクラス図の複雑化を回避
学士論文発表会
4
クラスに注目した表示
クラスに影響を与えるアスペクトを表示

fragile pointcut 問題の回避


クラスの変更がアスペクトの織り込みに予期しない悪影響を与える
Point.setX(int) に注目

setX() とアスペクトとの関係を表示
setX() の呼び出しを選択
setX() の変更には
change ポイントカットに注意

ジョインポイントを選択する fragile pointcut が把握できる
学士論文発表会
5
アスペクトに注目した表示
アスペクトに織り込まれるクラスを表示

意図しないジョインポイントが選択される問題を回避



ワイルドカードを含むポイントカットによる選択は把握が困難
同じアドバイスが何度も実行されてしまう
Update アスペクトに注目

Update に選択される
ジョインポイントを表示
このアドバイスの織り込みは不要
(Display が何度も再描画)

意図に沿ったポイントカットを記述できる
学士論文発表会
6
クラス図の複雑化を回避

C&Y では簡易表示機能を実装

メンバーの非表示オプション


選択アイコン(



利用者に必要のないメンバーを非表示にできる
)による織り込みの表現
アスペクトはメンバーを拡張するもの
拡張されたメンバーにはアイコンをつけて表示
必要になったときに詳細情報を表示

必要かどうかの判断は利用者に任せる
学士論文発表会
7
実装

アスペクト指向言語 GluonJ を対象に実装

Eclipse プラグインとして開発

プラグインのコード 7000行



内部で GluonJ の Weaver と同等の機能を実装している
GEF (Graphical Editing Framework) を使用
ジョインポイントの解析に Javassist を使用

GluonJ 内で Javassist を使用しているため
学士論文発表会
8
デモ
学士論文発表会
9
関連研究

AJDT (AspectJ Development Tools)
 クラス内のアドバイスの織り込みを把握
 アスペクトのプログラム全体への織り込みは表示できない


ActiveAspect [W. Coelhoら, ‘06]
 アスペクトがプログラムに与える影響を把握
 クラスに注目した表示ができない


無駄なアドバイスの織り込みを把握することが困難
fragile pointcut 問題は解決されない
UML を用いたアスペクト指向の設計 [D. Steinら, ‘02]
 クラス図を含めた UML を使う


いかに詳しく記述するかがポイント
プログラムの横断的構造は表示しない
学士論文発表会
10
まとめと今後の課題

まとめ


obliviousness にまつわる問題の回避
C&Y の提案




クラスに注目した表示
 fragile pointcut 問題の回避
アスペクトに注目した表示
 意図しないジョインポイントが選択される問題の回避
簡易表示機能
今後の課題


動的ポイントカットの表示法について考察
ある程度大きなプログラムを C&Y で表示して検証
学士論文発表会
11