横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール

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 フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
アスペクト指向プログラミングに 関する十の神話
情報伝播によるオブジェクト指向プログラム理解支援の提案
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングと Dependency Injection の融合
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
ソフトウェア工学 知能情報学部 新田直也.
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
契約による クラスとアスペクト間の 影響解析
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール 大谷 晃司 千葉 滋 東京工業大学 数理・計算科学専攻

あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01] ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

横断的関心事とは モジュール間をまたがってしまう関心事 編集、つけ外しが困難 例: ロギング処理、図形の再描画処理、タイマー処理など 横断的関心事に対応した言語が必要 Shape Rectangle setX setY setHeight setWidth x代入 y代入 高さ代入 幅代入 GUI GUI GUI GUI Timer Timer Timer Timer

アスペクト指向言語 GluonJ と AspectJ 横断的関心事のモジュール化 GluonJ リバイザでモジュール化 リバイザはクラスの一種 AspectJ アスペクトでモジュール化 アスペクトはクラスとは別物 @Reviser class Repainter{ static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); } @Reviser static class RectRepainter ex. Rectangle{ ... aspect Repainter{ pointcut setMethods(): execution(void set*(..)); after():setMethods(){ Screen.repaint(); }

実行される結果は同じ コードが織り込まれると同じ振る舞い class Shape{ void setX(int x){ ... void setX(int x){ this.xPos = x; Screen.repaint(); } @Reviser class Repainter{ @Reviser static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); } @Reviser static class RectRepainter ex. Rectangle{ ... aspect Repainter{ pointcut setMethods(): execution(void set*(..)); after():setMethods(){ Screen.repaint(); }

ツールの観点からGluonJとAspectJを比較 織り込み関係の表示ツール リバイザやアスペクトと、元のクラスの関係 Shape Timer GUI Timer GUI Timer Repainter Shape GUI Shape setX setY Repainter x代入 y代入 Timer Timer

織り込み関係がわからない それを知るためのツールが必要 Shape Timer GUI Timer GUI Timer Repainter setX setY Repainter x代入 y代入 Timer Timer 7

あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01] ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

GluonJ の場合: 拡張アウトラインビュー 単一ツールで統一的に表示可能 リバイザから見た織り込み関係も、クラスから見た織り込み関 係も同じツールで表示 リバイザもクラスの一種であるため 各メソッドの間の上書きする・される 関係で織り込み関係を表現 リバイザ @Reviser class Repainter{ @Reviser static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); } } RectRepainter ex. Rectangle{ ...}} クラス class Shape{ ... void setX(int x){ this.xPos = x; // Screen.repaint(); } 9

拡張アウトラインビュー(1/3) Eclipseプラグインとして開発 織り込み関係を階層的に表示 どのメソッドに織り込みが行われるかを表示 クラス側 リバイザ側 10

拡張アウトラインビュー(2/3) 織り込みを行うリバイザが複数存在 織り込みを行う順番で上から列挙する 織り込む順番が曖昧な場合はエラー表示 @Requireで織り込みを行う順番を設定 織り込みを行う順番で上から列挙する 織り込む順番が曖昧な場合はエラー表示 クラス側 リバイザ側 11

withinメソッド 特定のメソッドから呼び出された時のみ織り込み FigureEditorクラスのmouseDragged(MouseEvent)メソッド内でsetX(int)メソッドが呼ばれた時のみ織り込みを適用 @Reviser class Repainter{ static class ShapeRepainter ex. Shape{ @Within(FigureEditor.class) @Code("mouseDragged (java.awt.event.MouseEvent)") void setX(int x){ super.setX(x); Screen.repaint(); } … @Reviser static class RectRepainter ex. Rectangle{ ... class FigureEditor implements MouseMotionListener,MouseListener { … void mouseDragged(MouseEvent e) { clickShape.setX(newX); } 12

拡張アウトラインビュー(3/3) withinメソッドに対応 指定されたクラスとメソッドを表示 特定のクラスのメソッドから呼ばれた時のみ織り込みを行う 指定されたクラスとメソッドを表示 クラス側 リバイザ側 13

あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01] ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

AspectJ の場合:AJDT(AspectJ Development Tools) 単一ツールで織り込み関係を統一的に見せる事が出来 ない 織り込み関係を知るには 複数のツールを切り替えて使う必要がある クラスとアスペクトに分けている事が原因 クラスとアスペクトで表示方法が変わる クラス アスペクト class Shape{ ... void setX(int x){ this.xPos = x; // Screen.repaint(); } aspect Repainter{ pointcut setMethods(): execution(void set*(..)); after():setMethods(){ Screen.repaint(); } 15

AJDT: エディタ ソースコード内で織り込みが行われる箇所にマーク 織り込み関係は表示されない 全てのソースコードを確認しなければならない クラス側 アスペクト側 16

AJDT: アウトラインビュー クラス側 アスペクト側 織り込みが行われるメソッドをマークで表示 詳しい織り込みの内容を確認することが出来ない アスペクト側 アドバイス名と種類を表示 織り込み先の情報が無い クラス側 アスペクト側 17

AJDT: Cross-Referencesビュー 織り込み関係をクラス側、アスペクト側の双方から表示 クラスの視点では他の情報がなくなる アスペクトの視点では同じメソッドへ織り込みを行う別のアス ペクトを知ることが出来ない クラス側 アスペクト側 18

AJDT: Visualiserビュー プロジェクト全体の織り込み関係を色分けで表示 メソッド名、アドバイスなどが表示されない(抽象的過ぎる) エディタで開いてソースコードを確認する必要がある 19

まとめ 織り込み関係表示ツールの観点から2つのアスペクト指向 言語を比較 GluonJ + 拡張アウトラインビュー Better 単一ツールで織り込み関係を統一的に見せられる リバイザはクラスの一種だから GluonJ の言語仕様により良い織り込み関係表示ツールが実現可能に AspectJ + AJDT 織り込み関係を知る為に様々なツールを併用する必要 クラスとアスペクトに分けている事が原因 クラスとアスペクトで表示方法が変わる 20

関連研究と今後の課題 AspectMaps[Fabryら ‘11] 今後の課題 アスペクトの織り込み関係を色分けで表示 織り込みが行われる順番を重視 表示方法が抽象的 エディタを開いてソースコードを確認する必要がある 今後の課題 withinメソッドで指定されたメソッドへの表示 評価 実際に使用してもらい、ビューの切り替えを行う回数を調べる 21