アスペクトによるモジュール拡張を 強調したアウトラインビューア 理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 02-2149-7 堀江 倫大 1 アスペクト指向言語 アスペクト指向 オブジェクト指向の欠点を補完 モジュール間にまたがる処理(ロギング、同期処理) 横断的関心事の分離 AspectJ 代表的なアスペクト指向言語のひとつ Javaを言語拡張(advice、pointcut) アスペクトによりクラスに新たな処理を織り込む 2 従来のアスペクト指向の考え方 アスペクトをクラス側に「挿入する」という考え class Point { int x, y; public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } … } class Line { Point p1, p2; … moveBy(int dx, int dy) { p1.setX(p1.getX() + dx); p2.setY(p2.getY()++dy); dy); p2.setY(p2.getY() …… } } …… } } aspect aspect public UpdateSignaling UpdateSignaling { { pointcut move() : call(void Point.setX(int)); Point.call(int)); … after() : move() { Display.update(); Display update(); } … } ■ アドバイスの実行箇所を把握しずらい □ setXメソッドの呼び出し箇所を把握しずらい ■ 呼び出し側のモジュール性を壊している という意見がある 3 新しいアスペクト指向の捉え方 呼ばれる側のクラスを「拡張する」という考え class Point { int x, y; public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } … }... } class Line { publicp1, void setX(int x) { Point p2; …//もとのsetX()を実行 //Display.update()を実行 //呼び出し側がRectangleのとき moveBy(int dx, int dy) { }p1.setX(p1.getX() //にはDisplay.update()を実行 + dx); }p2.setY(p2.getY() + dy); … } … } aspect UpdateSignaling { Point.setX(int)) pointcut move() : call(void Point.setX(int)); && within(Rectangle); … after() : move() { Display.update(); } … } ■ 「メソッドの上書き」 □ モジュール性が壊されない (継承関係と類似) ■ 従来の考え方だとモジュール性が壊 れているように見えてしまうが、この 考え方ならそう見えにくい。 4 新しい捉え方に沿ったツールの開発 モジュール(クラス)を拡張するという視点 ■ Javadocコメントを同時に並べて表示 ■ 呼ばれる側にアスペクトの情報を 重ねて表示 ■ 呼ばれる側に情報が集まるので、 pointcutも表示する必要がある。 ■ call、get、setポイントカットに よって指定されたアドバイスの場 call(void Point.setX(int)) (実装中) ■ ばらばらの場所にあった関連のある 合にも、ターゲット側のモジュール コメントをひとつにまとめることで、有益 に情報を重ねて表示 な情報が得られる。 ■ 各モジュールを階層的に表示 ■ サブクラスのドキュメントにスーパー クラスの仕様が書き加えられることと ■ Eclipseプラグインとして提供 同様 5 実装 Eclipseプラグインとして開発 ビュープラグインを利用 SWT(Standard Widget ToolKit)を利用 AJDT(AspectJ Development Tools)のソースを 一部参考 AspectJ開発を可能にするEclipseプラグイン アドバイス、ポイントカットの情報を取得するためのコード を一部利用 実際のアプリケーション(AJHotDraw)を使って 動作確認 6 関連研究 Aspect-Aware Interface [Kiczalesら’05] アスペクト指向とは、既存のモジュールに新しい境界を 作るもの その境界を定義するインターフェイスが存在する 我々と同じ立場 呼び出される側のモジュールに着目する点が類似 AJDT(Aspect Development Tools) 織り込みの情報を提供するツールが存在する 呼び出し側に織り込みの情報を付加するだけ Javadocコメントに関する機能はない 7 まとめと今後の課題 まとめ モジュールを拡張するという視点に立ったツール アスペクトの情報を重ねて表示 Javadocコメントを結合 今後の課題 ポイントカット宣言に関するJavadocコメントの解析 AspectJではなく、GluonJを利用 表示方法の洗練(アイコンの充実) 8 既存のツール AJDT(AspectJ Development Tools) ■ ■ Cross-Referenceビュー AJDTエディタ □ □ 呼び出し側に織り込みの情報 呼び出し側に織り込み箇所を を載せる 示す 『setXメソッドの呼び出し後 にafterアドバイスが実行』 ここに織り込まれるという情報 が与えられるだけ 9
© Copyright 2025 ExpyDoc