横断的関心事に対応したオブジェクト指向言語 GluonJ...

21
大大 大大 大大 大 大大大大大大 大大 大大大大大大 大大大大大大大大大大大大大大大大大大大大大 GluonJ 大大大大大大大大大大大大大大大大 1

description

横断的関心事に対応したオブジェクト指向言語 GluonJ とその織り込み関係の可視化 ツール. 大谷 晃司 千葉 滋 東京 工業 大学 数理・計算科学専攻. あらすじ. 2つのアスペクト指向言語 GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01] ツールの観点から2つの言語を比較 織り込み関係の表示ツール アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ. 横断的関心事とは. - PowerPoint PPT Presentation

Transcript of 横断的関心事に対応したオブジェクト指向言語 GluonJ...

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

大谷 晃司 千葉 滋東京工業大学

数理・計算科学専攻

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

1

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

あらすじ

2

2つのアスペクト指向言語GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]

ツールの観点から2つの言語を比較 織り込み関係の表示ツール

アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT

GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

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

モジュール間をまたがってしまう関心事 例 : ロギング処理、図形の再描画処理、タイマー処理など

編集、つけ外しが困難 横断的関心事に対応した言語が必要

横断的関心事とは

3

ShapesetX

GUI

Timer

setY

GUI

Timer

Rectanglese t

Height

GUI

Timer

setWidth

GUI

Timer

x 代入 y 代入 高さ代入 幅代入

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

GluonJ リバイザでモジュール化 リバイザはクラスの一種@Reviserclass Repainter{ @Reviser static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); } @Reviser static class RectRepainter ex. Rectangle{ ...

}}

AspectJ アスペクトでモジュール化 アスペクトはクラスとは別物

アスペクト指向言語 GluonJ と AspectJ

4

aspect Repainter{ pointcut setMethods(): execution(void set*(..));

after():setMethods(){ Screen.repaint(); }}

横断的関心事のモジュール化

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

コードが織り込まれると同じ振る舞い実行される結果は同じ

5

@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(); }}

class Shape{ ...

void setX(int x){ this.xPos = x; Screen.repaint(); } ...

}

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

織り込み関係の表示ツール リバイザやアスペクトと、元のクラスの関係

ツールの観点から GluonJ と AspectJ を比較

6

ShapesetX

setY

GUI

Timer

Shape

GUI

Timer

Shape

Repainter

GUI

Timer

Timer

Repainter

Timer

x 代入 y 代入

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

それを知るためのツールが必要織り込み関係がわからない

7

ShapesetX

setY

GUI

Timer

Shape

GUI

Timer

Shape

Repainter

GUI

Timer

Timer

Repainter

Timer

x 代入 y 代入

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

あらすじ

8

2つのアスペクト指向言語GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]

ツールの観点から2つの言語を比較 織り込み関係の表示ツール

アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT

GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

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

GluonJ の場合: 拡張アウトラインビュー 単一ツールで統一的に表示可能

リバイザから見た織り込み関係も、クラスから見た織り込み関係も同じツールで表示 リバイザもクラスの一種であるため

各メソッドの間の上書きする・される関係で織り込み関係を表現

9

@Reviser class Repainter{ @Reviser static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); } } @Reviser static class RectRepainter ex. Rectangle{ ...}}

リバイザ

class Shape{ ...

void setX(int x){ this.xPos = x; // Screen.repaint(); }}

クラス

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

拡張アウトラインビュー (1/3) Eclipse プラグインとして開発 織り込み関係を階層的に表示

どのメソッドに織り込みが行われるかを表示クラス側 リバイザ側

10

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

拡張アウトラインビュー (2/3) 織り込みを行うリバイザが複数存在

@Require で織り込みを行う順番を設定 織り込みを行う順番で上から列挙する 織り込む順番が曖昧な場合はエラー表示

11

リバイザ側クラス側

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

within メソッド 特定のメソッドから呼び出された時のみ織り込み

@Reviserclass Repainter{ @Reviser 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{ ...

}}

12

class FigureEditor implements MouseMotionListener,MouseListener { …

void mouseDragged(MouseEvent e) { …

clickShape.setX(newX); …

} …

}

FigureEditor クラスのmouseDragged ( MouseE

vent )メソッド内でsetX(int) メソッドが呼ばれた時のみ織り込みを適用

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

拡張アウトラインビュー (3/3) within メソッドに対応

特定のクラスのメソッドから呼ばれた時のみ織り込みを行う 指定されたクラスとメソッドを表示

13

クラス側 リバイザ側

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

あらすじ

14

2つのアスペクト指向言語GluonJ [OOPSLA ’10] と AspectJ [ECOOP ’01]

ツールの観点から2つの言語を比較 織り込み関係の表示ツール

アスペクト指向では必須のツール GluonJ の拡張アウトラインビュー AspectJ の AJDT

GluonJ では単一ツールで表示可能で優れている 関連研究とまとめ

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

単一ツールで織り込み関係を統一的に見せる事が出来ない 織り込み関係を知るには複数のツールを切り替えて使う必要がある クラスとアスペクトに分けている事が原因

クラスとアスペクトで表示方法が変わる

AspectJ の場合: AJDT(AspectJ Development Tools)

aspect Repainter{ pointcut setMethods(): execution(void set*(..));

after():setMethods(){ Screen.repaint(); }}

class Shape{ ...

void setX(int x){ this.xPos = x; // Screen.repaint(); } ...

}

アスペクトクラス

15

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

AJDT: エディタ ソースコード内で織り込みが行われる箇所にマーク

織り込み関係は表示されない 全てのソースコードを確認しなければならない

16

クラス側 アスペクト側

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

AJDT: アウトラインビュー クラス側

織り込みが行われるメソッドをマークで表示 詳しい織り込みの内容を確認することが出来ない

アスペクト側 アドバイス名と種類を表示 織り込み先の情報が無い

17

クラス側 アスペクト側

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

AJDT: Cross-References ビュー 織り込み関係をクラス側、アスペクト側の双方から表示

クラスの視点では他の情報がなくなる アスペクトの視点では同じメソッドへ織り込みを行う別のアスペクトを知ることが出来ない

18

クラス側 アスペクト側

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

AJDT: Visualiser ビュー プロジェクト全体の織り込み関係を色分けで表示

メソッド名、アドバイスなどが表示されない ( 抽象的過ぎる ) エディタで開いてソースコードを確認する必要がある

19

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

まとめ 織り込み関係表示ツールの観点から 2 つのアスペクト指向言語を比較 GluonJ + 拡張アウトラインビュー Better

単一ツールで織り込み関係を統一的に見せられる リバイザはクラスの一種だから

GluonJ の言語仕様により良い織り込み関係表示ツールが実現可能に AspectJ + AJDT

織り込み関係を知る為に様々なツールを併用する必要 クラスとアスペクトに分けている事が原因

クラスとアスペクトで表示方法が変わる20

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

関連研究と今後の課題 AspectMaps[Fabry ら ‘ 11]

アスペクトの織り込み関係を色分けで表示 織り込みが行われる順番を重視 表示方法が抽象的 エディタを開いてソースコードを確認する必要がある

今後の課題 within メソッドで指定されたメソッドへの表示 評価

実際に使用してもらい、ビューの切り替えを行う回数を調べる

21