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