Download presentation
Presentation is loading. Please wait.
1
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
大谷 晃司 千葉 滋 東京工業大学 数理・計算科学専攻
2
あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]
ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ
3
横断的関心事とは モジュール間をまたがってしまう関心事 編集、つけ外しが困難 例: ロギング処理、図形の再描画処理、タイマー処理など
横断的関心事に対応した言語が必要 Shape Rectangle setX setY setHeight setWidth x代入 y代入 高さ代入 幅代入 GUI GUI GUI GUI Timer Timer Timer Timer
4
アスペクト指向言語 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(); }
5
実行される結果は同じ コードが織り込まれると同じ振る舞い 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(); }
6
ツールの観点からGluonJとAspectJを比較
織り込み関係の表示ツール リバイザやアスペクトと、元のクラスの関係 Shape Timer GUI Timer GUI Timer Repainter Shape GUI Shape setX setY Repainter x代入 y代入 Timer Timer
7
織り込み関係がわからない それを知るためのツールが必要 Shape Timer GUI Timer GUI Timer Repainter
setX setY Repainter x代入 y代入 Timer Timer 7
8
あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]
ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ
9
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
10
拡張アウトラインビュー(1/3) Eclipseプラグインとして開発 織り込み関係を階層的に表示 どのメソッドに織り込みが行われるかを表示
クラス側 リバイザ側 10
11
拡張アウトラインビュー(2/3) 織り込みを行うリバイザが複数存在 織り込みを行う順番で上から列挙する 織り込む順番が曖昧な場合はエラー表示
@Requireで織り込みを行う順番を設定 織り込みを行う順番で上から列挙する 織り込む順番が曖昧な場合はエラー表示 クラス側 リバイザ側 11
12
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
13
拡張アウトラインビュー(3/3) withinメソッドに対応 指定されたクラスとメソッドを表示
特定のクラスのメソッドから呼ばれた時のみ織り込みを行う 指定されたクラスとメソッドを表示 クラス側 リバイザ側 13
14
あらすじ 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]
ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ
15
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
16
AJDT: エディタ ソースコード内で織り込みが行われる箇所にマーク 織り込み関係は表示されない 全てのソースコードを確認しなければならない
クラス側 アスペクト側 16
17
AJDT: アウトラインビュー クラス側 アスペクト側 織り込みが行われるメソッドをマークで表示
詳しい織り込みの内容を確認することが出来ない アスペクト側 アドバイス名と種類を表示 織り込み先の情報が無い クラス側 アスペクト側 17
18
AJDT: Cross-Referencesビュー
織り込み関係をクラス側、アスペクト側の双方から表示 クラスの視点では他の情報がなくなる アスペクトの視点では同じメソッドへ織り込みを行う別のアス ペクトを知ることが出来ない クラス側 アスペクト側 18
19
AJDT: Visualiserビュー プロジェクト全体の織り込み関係を色分けで表示
メソッド名、アドバイスなどが表示されない(抽象的過ぎる) エディタで開いてソースコードを確認する必要がある 19
20
まとめ 織り込み関係表示ツールの観点から2つのアスペクト指向 言語を比較 GluonJ + 拡張アウトラインビュー Better
単一ツールで織り込み関係を統一的に見せられる リバイザはクラスの一種だから GluonJ の言語仕様により良い織り込み関係表示ツールが実現可能に AspectJ + AJDT 織り込み関係を知る為に様々なツールを併用する必要 クラスとアスペクトに分けている事が原因 クラスとアスペクトで表示方法が変わる 20
21
関連研究と今後の課題 AspectMaps[Fabryら ‘11] 今後の課題 アスペクトの織り込み関係を色分けで表示
織り込みが行われる順番を重視 表示方法が抽象的 エディタを開いてソースコードを確認する必要がある 今後の課題 withinメソッドで指定されたメソッドへの表示 評価 実際に使用してもらい、ビューの切り替えを行う回数を調べる 21
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.