AspectScope によるアスペクトとクラスのつながりの視覚化

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アスペクト指向プログラミングに 関する十の神話
アルゴリズムとプログラミング (Algorithms and Programming)
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
C#とC++とオブジェクト指向 上甲 健史.
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
複数個のJoinpointの集合を 対象としたPointcutを 記述可能なアスペクト指向言語
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
契約による クラスとアスペクト間の 影響解析
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
動的依存情報に基づく アスペクト間の関係抽出
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
開発者との対話を活かした 横断的構造の表現
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

AspectScope によるアスペクトとクラスのつながりの視覚化             堀江倫大 千葉滋         東京工業大学

アスペクト指向言語 ジョインポイント ポイントカット アドバイス プログラム中のイベントが発生するとき メソッド呼び出し時、フィールド参照時など ポイントカット どのイベント発生時にコードを実行するか 例: Graphicsクラスのdrawメソッドを呼び出すとき プリミティブなポイントカット set: フィールドへの代入、 get: フィールドの参照、   execution: メソッドの実行、 call: メソッド呼び出しなど アドバイス ポイントカットが指定したタイミングで実行する処理 例: ログ出力処理

ログ出力 オブジェクト指向では、Logger クラスを定義して直接利用 ログ出力させたい箇所に挿入 ログ出力コードを取り除きたいときは挿入したコードを削除する必要 class Canvas { Image img; : void paint(Graphics g) {     Logger.log(“log”); g.draw(img); } class Logger { public static void log(String msg) { System.out.println(msg); }

アスペクト指向の利用 AspectJ: 代表的なアスペクト指向言語のひとつ アスペクト aspect LogAspect { ポイントカット Graphics クラスの draw メソッド呼び出し前に Logger.log メソッドを実行 アスペクト aspect LogAspect { ポイントカット pointcut logged() : call(void Graphics.draw()); アドバイス before() : logged() { //ログ出力 Logger.log(“log"); } class Canvas { Image img; : void paint(Graphics g) { g.draw(img); } class Graphics { : void draw(Image img) { }}

アスペクト指向 モジュール間の結びつきを緩める 利点: クラスの定義を変更せずに、アスペクトにより振 る舞いを変更することが可能 欠点: モジュール間の結びつきが見えなくなってしまう 欠点を補うため、これまで様々な研究が成されてきた AJDT(AspectJ Development Tools) XPI(Crosscutting Programming Interface) Open Modules など

モジュール間の結びつきを「見える化」 従来の多くの研究 モジュールインターフェースを拡張して表現 モジュール(クラス) メソッド アドバイス イベント(ポイントカット) モジュール(クラス) メソッド

AJDT AJDT エディターと Visualiser ビュー ポイントカットによって選択されたジョインポイントを表示 アドバイスが結びつく「イベント」の発生位置を示す カプセル化が壊れる AJDTエディター Visualiserビュー

AspectScope の提案 クラスのアウトラインビューア AspectJ 用の Eclipse プラグイン アスペクトによって織り込まれたクラスのメンバのアウトラインを表示する 各メンバをインターフェースとして列挙し、その仕様の詳細を表示 outline Javadoc

AspectScope の「見える化」 モジュールインターフェースの拡張なしで モジュール間の結びつきを表現 モジュール(クラス) メソッド 従来の枠組みのままでアスペクトに対応 アスペクトはモジュールのメソッドの挙動を拡張すると考える Good! アドバイス モジュール(クラス) メソッド

AJDT callポイントカット (get、setポイントカット) アドバイスは呼び出し側のメソッドの前後で実行されるものととらえる after(): call(void Point.setX(int)) { Display.update(); } 呼び出し側クラス AJDTエディタ

AspectScope callポイントカット (get、setポイントカット) 呼ばれた側のメソッドが拡張されたととらえる after(): call(void Point.setX(int)) { Display.update(); } 呼ばれる側のクラス AspectScope

within、cflow ポイントカット 条件付き拡張 条件的な拡張とみなす after(): call(void Point.setX(int)) && within(Line) { Display.update(); } 条件付き拡張

javadoc コメントによる拡張の説明 ソースコードからコメントを集めて独自の javadoc コメントを表示 setXメソッドの実装から抽出 ポイントカットの実装から抽出 アドバイスの実装から抽出

pointcut の説明 ポイントカットの定義を自然言語で表現 ワイルドカードの 「*」、「+」、「..」は 具体的な名前に置き換えられる void setX(int) pointcut move() : call(void Shape+.set*(int)) || call(void Shape+.moveBy(..)); ワイルドカードの 「*」、「+」、「..」は 具体的な名前に置き換えられる after(): move() && within(Line) { Display.update(); }

具体例1: Observer アスペクト Setter メソッドが呼び出されるときにアドバイスが実行される Shape … Point setX(int x) setY(int y) Line setP1(Point p1) setP2(Point P2) Rectangle Display update() * 1 LineクラスのsetP1メソッド内でsetXメソッドが呼ばれるときにはアドバイスは実行しない。 pointcut change() : call(void Shape+.set*(..)); after(): change() && !cflowbelow(change()) { Display.update(); }

AspectScope vs. AJDT AspectScope AJDTエディタ AJDT では呼び出し側で ジョインポイントシャドウ を表示するだけ AspectScope は、setP1 メソッドが呼ばれるときには1度だけupdate メソッドが呼ばれることが表示される。

具体例2: Loggingアスペクト Canvas クラス内で Graphics クラスの draw メソッドを呼び出すときにログを出力する class Canvas { Image image; : void paint(Graphics g) { g.draw(image); } aspect LoggingAspect { before(): call(* Graphics.draw(..)) && within(Canvas) { System.out.println(“log”); }

AspectScope vs. AJDT AspectScope AJDTエディタ before() : call(void Graphics.draw(Image)) && within(Canvas) { System.out.println(…); } AspectScopeは呼ばれる側がどう拡張されるかを表示する

関連研究 Aspect-Aware Interface [Kiczalesら、‘05] Classbox/J [Bergelら、‘05] AspectScopeと基本的な考えは同じ 概念的な考えのみを提案 call、get、setポイントカットに関する具体的な提案はない javadocコメントに関する考察もない Classbox/J [Bergelら、‘05] ある条件化でのみ有効なクラスの拡張を定義できるという考えが類似 しかし、アスペクト指向言語ではない

まとめ AspectScope: AspectJ用のプログラミングツール クラスのアウトラインを表示 呼ばれる側のクラスがどのように拡張されたかを表示 javadocコメントを集めることで、拡張の詳細を表示 モジュールインタフェースの拡張なしでモジュール間の結びつきを表現