Transcript
Page 1: アスペクト指向 ソフトウェア開発

1

アスペクト指向ソフトウェア開発

九州工業大学情報工学部 知能情報工学科鵜林尚靖2004年10月15日

組込みソフトウェアシンポジウム ESS 2004

Page 2: アスペクト指向 ソフトウェア開発

2

内容

アスペクト指向が生まれた背景 アスペクト指向の考え方 様々なアスペクト指向メカニズム アスペクト指向の適用事例 アスペクト指向とMDA アスペクト指向の今後

Page 3: アスペクト指向 ソフトウェア開発

3

1.アスペクト指向が  生まれた背景

Page 4: アスペクト指向 ソフトウェア開発

4

ソフトウェア開発手法の変遷60年代 70年代 80年代 90年代 2000年代

構造化手法

オブジェクト指向手法

OOAOODパターンフレームワークコンポーネント アスペクト指向

構造化プログラミング構造化分析構造化設計 OOP EA

プロダクトラインアジャイル , XPMDA

Page 5: アスペクト指向 ソフトウェア開発

5

アスペクト指向とは何?

一言でいうと

「モジュール化メカニズム」の一つ

Page 6: アスペクト指向 ソフトウェア開発

6

モジュール化メカニズムの歴史

構造化機能中心のため、データの変更に対して脆い

データ抽象データとそれに関連する操作をまとめてしまおう

抽象データ型データとそれに関連する操作をまとめて型にしよう

オブジェクト指向継承機構も入れて、再利用性を高めよう

Page 7: アスペクト指向 ソフトウェア開発

7

モジュール化メカニズムの発展 ~ 構造化 から オブジェクト指向 へ ~

構造化

操 作

データ

データ

データ

データ

操 作

操 作 操 作

操 作

オブジェクト指向

操 作データ

オブジェクト操 作

データ

オブジェクト

操 作

操 作

操 作

データ

オブジェクト

操 作

データ

データを変更すると周りの操作に影響が波及する

変更の影響範囲がオブジェクト内にカプセル化される

Page 8: アスペクト指向 ソフトウェア開発

8

モジュール化の理想像

問題領域

要求分析要求分析 設計設計 実装実装

ソフトウェア構造

問題領域の構造がソフトウェア構造に対応するソフトウェア構造を構成する関心事を自然にモジュール化できる (関心事の分離 “ Separation of Concerns” Edsger Wybe Dijkstra )

分析時の関心事

設計時の関心事

モジュールの構成

Page 9: アスペクト指向 ソフトウェア開発

9

良いモジュール化

org.apache.tomcat における XML parsing– 赤い線は XML parsing を行うコード行を示す– 1箇所にモジュール化されている

AspectJ. http://eclipse.org/aspectj/ より抜粋

機能要件をきれいにモジュール化

Page 10: アスペクト指向 ソフトウェア開発

10

しかし、ログ処理の場合は...

org.apache.tomcat におけるログ処理– 赤い線はログ処理を行うコード行を示す – 1箇所ではない– しかも、数多くの場所に分散している( tangling and

scattering )

複数のオブジェクトにまたがる( Crosscutting Concerns )

AspectJ. http://eclipse.org/aspectj/ より抜粋

Page 11: アスペクト指向 ソフトウェア開発

11

現実のモジュール化は...

(問題意識) 上流の関心事が、下流に行くにしたがって構造的に分散してしまう (オブジェクト指向でも解決できない問題がある)

問題領域

要求分析要求分析 設計設計 実装実装

ソフトウェア構造

分析時の関心事

設計時の関心事

モジュールの構成

Page 12: アスペクト指向 ソフトウェア開発

12

オブジェクト指向の限界

<横断的関心事の例>

・エラーチェック戦略・セキュリティ・デザインパターン・同期制御・資源共有・分散にかかわる関心事・性能最適化

オブジェクト指向プログラミングは、機能要件のカプセル化には優れているが、横断的関心事( Crosscutting Concerns )の表現には必ずしも向いていない。

オブジェクト指向プログラミングは、機能要件のカプセル化には優れているが、横断的関心事( Crosscutting Concerns )の表現には必ずしも向いていない。

性能最適化のためのコードを追加しようとすると、コードが複数のオブジェクトに分散してしまい、見通しの悪いプログラムになってしまう。「分かりやすく性能も良い」プログラムを作るのが難しい。

AOP

Page 13: アスペクト指向 ソフトウェア開発

13

組込みソフトウェア設計の難しさ

現在のソフトウェア技術では、機能的合成可能性が物理的合成可能性を意味するものではない。

実際、物理特性は合成可能ではない。むしろ、開発プロセスにおいて、横断的制約( cross-cutting constraints )として現れる。

このような横断的制約は設計をやり難くしてしまう可能性がある。

Janos Sztipanovits and Gabor Karsai:Generative Programming for Embedded Systems,GPCE2002, LNCS2487, pp.32--49, 2002

Page 14: アスペクト指向 ソフトウェア開発

14

組込みソフトウェアの構造

HW特性

応答性

最適化メモリ容量

きれいなプログラムを作成したい!でも、HW特性、性能向上、例外のためのコードを追加するとどんどんプログラムが汚くなってしまう。。。

アスペクト指向

Page 15: アスペクト指向 ソフトウェア開発

15

アスペクト指向を実現する言語処理系、システム

AspectJ ( Gregor Kiczales, et.al. ) Hyper/J  ( Harold Ossher, et.al. ) DemeterJ  ( Karl J. Lieberherr, et.al. ) Composition filters  ( Mehmet Aksit,

et.al. ) JBoss-AOP AspectWerkz  など多数

Page 16: アスペクト指向 ソフトウェア開発

16

2.アスペクト指向の  考え方

~ AspectJ を中心に ~

Page 17: アスペクト指向 ソフトウェア開発

17

AspectJ

最も代表的なAOP言語 AOPの基本的な考え方をJava上に実

現した言語 元々はPARCで開発。現在はEclipseプロジェクトに移管。

AspectJ: http://eclipse.org/aspectj/

Page 18: アスペクト指向 ソフトウェア開発

18

開発環境: AJDT

Eclipse Tools Project の1つ。

AJDT ( AspectJ Development Tools )は、 AspectJ を用いたアスペクト指向開発を支援するためのツールを Eclipse 上に提供する。

AJDT を用いることにより、 JDT ( Java Development Tools )上で AspectJ の機能が使用できるようになる。

AJDT: http://eclipse.org/ajdt/

Page 19: アスペクト指向 ソフトウェア開発

19

AspectJによるプログラミング方式同期制御、資源共有、性能最適化など複数のオブジェクトにまたがる関心事をアスペクトというモジュール概念を用いて記述

weaverweaver

オブジェクト(通常の機能)

オブジェクト(通常の機能)

アスペクト(オブジェクトにまたがる関心事)

アスペクト(オブジェクトにまたがる関心事)

プログラムプログラム

・複数のオブジェクトにまたがる関心事を見通しよく記述できる!・「分かりやすく性能も良い」プログラムが作れる!

Page 20: アスペクト指向 ソフトウェア開発

20

AspectJの主要概念

振る舞いへの作用

ジョインポイント(join point)ポイントカット(pointcut)アドバイス(advice)

構造への作用

インタータイプ定義declare句による宣言

Page 21: アスペクト指向 ソフトウェア開発

21

簡単なAspectJプログラム

「 AspectJ によるアスペクト指向プログラミング入門」 長瀬、天野、鷲崎、立堀 ( 著 )  より

public class HelloWorld { public static void main ( String [], args) { HelloWorld app = new HelloWorld (); app.hello(); }

void hello() { System.out.println(“こんにちは!” ); }}

HelloWorld.java

public aspect Trace { private String HelloWorld.mes = “ トレース” ;

public pointcut atHello() : call (void HelloWorld.hello());

before(HelloWorld h) : atHello() && target(h) { System.out.println(h.mes + “呼び出し前” ); }

after(HelloWorld h) : atHello() && target(h) { System.out.println(h.mes + “呼び出し後” ); }}

Trace.java

アスペクト

ポイントカット

アドバイス

インタータイプ定義

Page 22: アスペクト指向 ソフトウェア開発

22

JPM( Join Point Model )

プログラム上の様々な実行

( join point )

実行点の取り出し

( pointcut )

実行点の中からトレース処理に関わる部分を抽

トレースコードの埋め込み

( advice )

メソッド呼び出し、変数参照/更新などの実行点を捕まえる

weaving

public aspect Trace { private String HelloWorld.mes = “ トレース” ;

public pointcut atHello() : call (void HelloWorld.hello());

before(HelloWorld h) : atHello() && target(h) { System.out.println(h.mes + “呼び出し前” ); }

after(HelloWorld h) : atHello() && target(h) { System.out.println(h.mes + “呼び出し後” ); }}

Page 23: アスペクト指向 ソフトウェア開発

23

実用的な例: 簡易図形エディタ

operations that move elements

Display

*

2Point

getX()getY()setX(int)setY(int)moveBy(int, int)

Line

getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)

Figure

makePoint(..)makeLine(..)

FigureElement

moveBy(int, int)

AspectJ. http://eclipse.org/aspectj/ より抜粋

Page 24: アスペクト指向 ソフトウェア開発

24

通常の保守、改良class Line { private Point p1, p2;

Point getP1() { return p1; } Point getP2() { return p2; }

void setP1(Point p1) { this.p1 = p1;

} void setP2(Point p2) { this.p2 = p2;

}}

class Point {

private int x = 0, y = 0;

int getX() { return x; } int getY() { return y; }

void setX(int x) { this.x = x;

} void setY(int y) { this.y = y;

}}

class Line { private Point p1, p2;

Point getP1() { return p1; } Point getP2() { return p2; }

void setP1(Point p1) { this.p1 = p1; Display.update(this); } void setP2(Point p2) { this.p2 = p2; Display.update(this); }}

class Point {

private int x = 0, y = 0;

int getX() { return x; } int getY() { return y; }

void setX(int x) { this.x = x; Display.update(this); } void setY(int y) { this.y = y; Display.update(this); }}

変更が複数のクラスに散らばってしまう!

AspectJ. http://eclipse.org/aspectj/ より抜粋

Page 25: アスペクト指向 ソフトウェア開発

25

aspect DisplayUpdating {

pointcut move(FigureElement figElt): target(figElt) && (call(void FigureElement.moveBy(int, int) || call(void Line.setP1(Point)) || call(void Line.setP2(Point)) || call(void Point.setX(int)) || call(void Point.setY(int)));

after(FigureElement fe) returning: move(fe) { Display.update(fe); }}

AspectJ による保守、改良

class Line { private Point p1, p2;

Point getP1() { return p1; } Point getP2() { return p2; }

void setP1(Point p1) { this.p1 = p1; } void setP2(Point p2) { this.p2 = p2; }}

class Point {

private int x = 0, y = 0;

int getX() { return x; } int getY() { return y; }

void setX(int x) { this.x = x; } void setY(int y) { this.y = y; }}

変更が1つのアスペクトに局所化される!予期しないソフトウェア発展に有効! ( unanticipated software evolution )

AspectJ. http://eclipse.org/aspectj/ より抜粋

( set* のような記述も可能)

Page 26: アスペクト指向 ソフトウェア開発

26

DisplayUpdating

Display

*

2Point

getX()getY()setX(int)setY(int)moveBy(int, int)

Line

getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)

Figure

makePoint(..)makeLine(..)

FigureElement

moveBy(int, int)

クラスを横断するアスペクト

AspectJ. http://eclipse.org/aspectj/ より抜粋

Page 27: アスペクト指向 ソフトウェア開発

27

3.様々なアスペクト指向  メカニズム

Page 28: アスペクト指向 ソフトウェア開発

28

様々なアスペクト指向メカニズム

アスペクト指向 = AspectJ ではない!

たとえば、

PA (AspectJ流 pointcut & advice )TRAV ( DemeterJ流 traversal specifications)COMPOSITOR ( Hyper/J 流 class hierarchy composition )OC ( AspectJ 流 open classes )※用語は以下のものに準拠

Hidehiko Masuhara and Gregor Kiczales:Modeling Crosscutting in Aspect-Oriented Mechanisms, ECOOP 2003

Page 29: アスペクト指向 ソフトウェア開発

29

ASB

ASB( Aspect Sand Box )

4つのアスペクト指向メカニズムをモデル化4つのインタプリタを提供

ここでは、ASBのサンプルプログラム(※)を提示しながら4つのアスペクト指向メカニズムを紹介する

※ 元々のプログラムはSchemeライクな言語であるが、ここでは、  分かりやすさを考慮してJavaライクな 言語で説明する※ 以下の論文からの引用    Hidehiko Masuhara and Gregor Kiczales:    Modeling Crosscutting in Aspect-Oriented Mechanisms, ECOOP 2003

http://www.cs.ubc.ca/labs/spl/projects/asb.html

Page 30: アスペクト指向 ソフトウェア開発

30

基盤となる例題プログラム

簡易図形エディタ

Page 31: アスペクト指向 ソフトウェア開発

31

PA (AspectJ流 Pointcut & Advice)

after (FigureElement fe): ( call(void Point.setX(int)) || call(void Point.setY(int)) || call(void Line.setP1(Point)) || call(void Line.setP2(Point))) && target(fe){ fe.display.update(fe);

ASBサンプルプログラム

Page 32: アスペクト指向 ソフトウェア開発

32

TRAV (DemeterJ流)

Visitor counter = new CountElementsVisitor();traverse("from Figure to FigureElement", fig, counter);

fig

Point

[Visitor]Counter

traverse 仕様に則り、オブジェクト木を訪問し、Visitor メソッドを実行

Northeastern 大学で開発されたツール/ライブラリで、 Javaによる Adaptive Programming を支援する

ASBサンプルプログラム

Page 33: アスペクト指向 ソフトウェア開発

33

COMPOSITOR (HyperJ流)

IBM T.J Watson Research Center で開発された Javaベースの言語。

SOP ( Subject-oriented programming )およびその後継の MDSOC ( Multi-Dimensional Separation Of Concerns )という考え方に基づいている。

すべてを関心事(クラスで表現)としてプログラミングする方式。AspectJ のようにアスペクトとクラスといった区分がない。

ソフトウェアの evolutionへの柔軟な対応を重視。

Hyper/Jとは

Page 34: アスペクト指向 ソフトウェア開発

34

つづき

ASBサンプルプログラム

class Observable { Display display; void moved() { display.update(this); }}

; relationship between Point/Line and Observablematch Point.setX with Observable.movedmatch Point.setY with Observable.movedmatch Line.setP1 with Observable.movedmatch Line.setP2 with Observable.moved

Page 35: アスペクト指向 ソフトウェア開発

35

OC (AspectJ流 Open Class)

AspectJ の インタータイプ定義

class DisplayMethods { void Point.draw() { Graphics.drawOval(...); } void Line.draw() { Graphics.drawLine(...); }}

ASBサンプルプログラム

Page 36: アスペクト指向 ソフトウェア開発

36

疑問...

PATRAVCOMPOSITOROC

同じアスペクト指向と言っても全然違うではないか?

これらに共通するものはあるのか?

Page 37: アスペクト指向 ソフトウェア開発

37

Three - Part Model

A - program

B - program

X - computationor programXJP-

join point

IDA -

means of

identifying

IDBIDB

EFFA

EFFA

EFF B -

mea

ns o

f

effe

ctingEFF B -

mea

ns o

f

effe

cting

META -weaving

parameter

Hidehiko Masuhara and Gregor Kiczales:    Modeling Crosscutting in Aspect-Oriented Mechanisms, ECOOP 2003

Page 38: アスペクト指向 ソフトウェア開発

38

Three - Part Model (つづき)

c, m, f: class, method, field の略

Page 39: アスペクト指向 ソフトウェア開発

39

4.アスペクト指向の  適用事例

Page 40: アスペクト指向 ソフトウェア開発

40

アスペクト指向の適用事例

デバッグやロギングについてはメリットは分かるが、それ以外の応用はどうなのか?

デザインパターンへの応用                  [ Hannemann他02]データベースへの応用

[ Rashid他03] FreeBSDカーネルの最適化コードをAOPで分離                  [Coady他02,03]WebSphereのコードをAOPで分離                  [Coyler04]

Page 41: アスペクト指向 ソフトウェア開発

41

事例1: デザインパターンへの応用

Jan Hannemann and Gregor Kiczales:Design Pattern Implementation in Java and AspectJ, OOPSLA2002 (2002)

AspectJを持いて、GoFデザインパターンの記述を改良

Page 42: アスペクト指向 ソフトウェア開発

42

Observer パターンSubject

Attach(Observer)Detach(Observer)Notify()

1 *Observer

Update()

ConcreteSubject

subjectState:State*

GetState()

1 1

subject

return subjectState;

ConcreteObserver

observerState:State*

Update()

observerState= Subject->GetState();

o

for(;全ての Observer;){o->Update();}

Page 43: アスペクト指向 ソフトウェア開発

43

Observer パターンの適用例

Jan Hannemann and Gregor Kiczales:Design Pattern Implementation in Java and AspectJ, OOPSLA2002 (2002) より引用

Page 44: アスペクト指向 ソフトウェア開発

44

Observerパターンの汎用アスペクト

Jan Hannemann and Gregor Kiczales:Design Pattern Implementation in Java and AspectJ, OOPSLA2002 (2002) より引用

抽象アスペクト

インタフェース

抽象ポイントカット

アドバイス

Page 45: アスペクト指向 ソフトウェア開発

45

実際のプログラムへの適用

Jan Hannemann and Gregor Kiczales:Design Pattern Implementation in Java and AspectJ, OOPSLA2002 (2002) より引用

具象ポイントカット

Page 46: アスペクト指向 ソフトウェア開発

46

事例2: データベースへの応用

永続性( Persistence )は横断的関心事の1つ

アスペクト指向により、永続性をモジュール化したい永続アスペクトを再利用したい永続性のことを気にせずにアプリケーションを開発したい

Aspect-Oriented Database

Awais Rashid and Ruzanna Chitchyan:"Persistence as an aspect", AOSD2003

Page 47: アスペクト指向 ソフトウェア開発

47

アスペクト化された永続性(1)

J ournalvol umenumber

Seri essubj ectcontentsvol ume

Book

Publ i shernameemai l

Publ i sher Locati ontowncountry

1. . n

1

+I s_Located_at

+I s_for_publ i sher

1. . n

1

AutherEdi tor

fi rstNamesurnameemai laddress

Bi bl i ography I tem

ti t l epubl i cati onDateurl

1. . n

1

+Has_Publ i shed1. . n

+Publ i shed_By

1

1. . n

1. . n

+HasAuthored/ Edi ted

+Authored/Edi ted_By

1. . n

1. . n

Archi veI SBNpages

Art i cl estartPageendPage

ConferenceconferenceNamecontents

データアクセスに関わるjoin point を抽出し、そこにDB 処理のためのコードをweaving する

例: 文献管理アプリケーション

Page 48: アスペクト指向 ソフトウェア開発

48

アスペクト化された永続性(2)

public class PersistentRoot { protected boolean isDeleted = false; public void delete() { this.isDeleted = true; } public boolean isDeleted() { return this.isDeleted; }}

public aspect ApplicationDatabaseAccess {

declare patents: (BibliographyItem || AuthorEditor || Publisher || PublisherLocation) extends PersistentRoot;

// other code}

public abstract aspect DatabaseAccess {

private static Connection dbConnection; private static String dbURL; abstract pointcut establishConnection(); abstract pointcut closeConnection(); public abstract String getDatabaseURL(); public abstract String getDriverName();

pointcut trapInstantiation() : call(PersistentRoot+.new(..)); pointcut trapUpdates(PersistentRoot obj) : !cflow(call(public static Vector SQLTranslation.getObjects(ResultSet, String))) && (this(obj) && execution(public void PersistentRoot+.set*(..)));

pointcut trapRetrievals() : call(Vector PersistentData.get*(..)); public static PersistentData getPersistentData() { … }

: :

// advice code}

AspectJ による記述

Connection

Storage & Update

Retrieval

Page 49: アスペクト指向 ソフトウェア開発

49

アスペクトベースの永続化フレームワーク

永続性の部分をアスペクト化することにより、アプリケーションは永続性のことを気にせずに開発できる(一部例外あり)。

永続化フレームワークMetaData Access

<<aspect>>

Persi stent Data

Persi stent Data I mpl i mentat i on

Appl i cat i on speci fi c customi sat i on

Appl i cat i on Database Access

<<aspect>>Establ i sh Mappi ng

<<aspect>>

Lookup Tabl e

SQLTraj nsl at i on<<aspect>>

Data Access<<aspect>> <<use>>

<<use>><<use>>

<<use>>

J ournalvol umenumber

Seri essubj ectcontentsvol ume

Book

Publ i shernameemai l

Publ i sher Locati ontowncountry

1. . n

1

+I s_Located_at

+I s_for_publ i sher

1. . n

1

AutherEdi tor

fi rstNamesurnameemai laddress

Bi bl i ography I tem

ti t l epubl i cat i onDateurl

1. . n

1

+Has_Publ i shed1. . n

+Publ i shed_By

1

1. . n

1. . n

+HasAuthored/ Edi ted

+Authored/Edi ted_By

1. . n

1. . n

Archi veI SBNpages

Art i cl estartPageendPage

ConferenceconferenceNamecontents

アプリケーション

Weaving

Page 50: アスペクト指向 ソフトウェア開発

50

5.アスペクト指向とMDA

Page 51: アスペクト指向 ソフトウェア開発

51

MDA ( Model-Driven Architecture )とは

実装技術(J2EEや.NETなど)から分析 / 設計を独立させ、設計情報が実装技術に左右されないようにする技術

    分析 /設計部分はプラットフォームに依存しない為、再利用可能

UML 2の目玉

Page 52: アスペクト指向 ソフトウェア開発

52

MDAと従来プロセスの違い

分析

設計

コーディング

CIM

PIM

PSM

ソース・コード

CIM: Computation Independent ModelPIM: Platform Independent ModelPSM: Platform Specific Model

従来の開発 MDAによる開発

設計フェーズが大きく変化!

モデルコンパイラによる自動変換

Page 53: アスペクト指向 ソフトウェア開発

53PIM PSM

ステップ1: 複数PIMの合成

ステップ1: 複数PIMの合成

ステップ2: アクションフォーム        Beanへの変換

ステップ2: アクションフォーム        Beanへの変換

ステップ3: アクションクラス        の新規作成

ステップ3: アクションクラス        の新規作成

モデル変換の例(Strutsの場合)

①PIM クラスのマージ

②Bean規約名に変更③ActionForm を継承④setter/getter を追加

⑤アクションクラスを生成⑥Action を継承⑦execute メソッドを追加⑧メソッド本体を追加

Page 54: アスペクト指向 ソフトウェア開発

54

MDAのメリット

コード中心開発からモデル中心開発へパラダイムシフト: 開発者は特定のプラットフォームやプログラミング技術にとらわれることなく、 PIM の開発に全力を注ぐことができる。

新しいタイプのコンポーネント化: PIM モデル部品とモデル変換規則をライブラリ化することにより、様々な機能やプラットフォームに対応したプロダクト群を生成することが可能になり、プロダクトライン型開発の実現につながる。

Page 55: アスペクト指向 ソフトウェア開発

55

MDA実現のための鍵

厳密なモデル表記 (MOF、OCL) 厳密なモデル変換定義 (QVT)

MOF: Meta Object FacilityOCL: Object Constraint LanguageQVT: Queries, Views, and Transformations

mapping Simple_Class_To_Java_Class refine Simple_Class_And_Java_Class { domain {(SM.Class)[name = n, attributes = A] } body { (JM.Class)[ name = n, attributes = A->iterate(a as ={} | as + Simple_Attribute_To_Java_Attribute(a)) ] }}

QVT の例

Page 56: アスペクト指向 ソフトウェア開発

56

MDAとアスペクト指向

「 AspectJ によるアスペクト指向プログラミング入門」 長瀬、天野、鷲崎、立堀 ( 著 )  より

PIMモデル(UML)

マッピングルール(MOF QVT)

アプリケーション

実装環境対応コード

アプリケーション

実装環境対応コード

アスペクト記述言語

weaving

Page 57: アスペクト指向 ソフトウェア開発

57

当研究室の研究紹介:AspectMモデルコンパイラ

アスペクト( モデル変換モジュールとしてのアスペクト )

アスペクト( モデル変換モジュールとしてのアスペクト )

アスペクト( モデル変換モジュールとしてのアスペクト )

アスペクト( モデル変換モジュールとしてのアスペクト )

アスペクト図( モデル変換モジュールとしてのアスペクト )

アスペクト図( モデル変換モジュールとしてのアスペクト )

UML モデル( クラス図 )

UML モデル( クラス図 )

UML モデル( クラス図 )

UML モデル( クラス図 )weaveweave

アスペクトを追加することにより様々な変換を可能にする

アスペクト図( システム構成モジュール

としてのアスペクト )

アスペクト図( システム構成モジュール

としてのアスペクト )

モデルコンパイラモデルコンパイラXML

XML

XML

XML

アスペクト指向メカニズムによりモデルコンパイラを実現!

Page 58: アスペクト指向 ソフトウェア開発

58

AspectMにおけるJPM

JPM でモデル変換を記述

クラス図

クラス名属性

・・・

操作・・・

Join PointJoin Point

Point CutPoint Cut

クラス名属性①属性②

操作・・・

AdviceAdvice

Page 59: アスペクト指向 ソフトウェア開発

59

モデル変換のためのJPM

モデル変換機能 PA CM NE OC RN RL

操作本体の変更 ○

クラスのマージ ○

クラスの追加 /削除 ○

操作の追加 /削除 ○

属性の追加 /削除 ○

クラス名の変更 ○

操作名の変更 ○

属性名の変更 ○

継承の追加 /削除 ○

集約の追加 /削除 ○

関連の追加 /削除 ○

①PIM クラスのマージ  CM②Bean規約名に変更  RN③ActionForm を継承  RL④setter/getter を追加  OC⑤アクションクラスを生成  NE⑥Action を継承  RL⑦execute メソッドを追加  OC⑧メソッド本体を追加  PA

PA ( pointcut & advice ), CM ( composition ), NE ( new element ), OC ( open class ), RN ( rename ),RL ( relation )

Page 60: アスペクト指向 ソフトウェア開発

60

AspectMの記述例

<< CM >>merge-message-classes

message-classes : class { Message || MessageProfile }

merge-message-classes [message-classes] : merge-by-name { PostMessage }

aspect

<aspect name="merge-message-classes" type="CM" > <pointcut name="message-classes" type="class"> Message ||

MessageProfile </pointcut> <advice name="merge-message-classes" type="merge-by-name"> <ref-pointcut> message-classes </ref-pointcut> <advice-body> <element> PostMessage</element> </advice-body> </advice></aspect>

Message クラスと MessageProfile クラスをマージして PostMessage クラスに変換

Page 61: アスペクト指向 ソフトウェア開発

61

6.アスペクト指向の今後

Page 62: アスペクト指向 ソフトウェア開発

62

アスペクト指向の今後

現在、プログラミング周りで研究が活発(80年代のOOP研究を彷彿させる)

今後は、適用事例の拡大、開発方法論の整備、アスペクトコンポーネント・フレームワークの整備に向かって行くと思われる(90年代のOOソフトウェアエンジアリングの発展に類似)

歴史は繰り返す...

Page 63: アスペクト指向 ソフトウェア開発

63

AOSD  ソフト開発工程全体への波及

AOP ( Aspect-Oriented Programming )から

AOSD ( Aspect-Oriented Software Development )へ

要求分析要求分析 設計設計 実装実装

Early Aspect AODesign Pattern

AO: Aspect-Oriented

AOFramework

AspectMining

AOLanguage

AOComponent

AOModeling

AODatabase

Page 64: アスペクト指向 ソフトウェア開発

64

上流段階のアスペクト研究例Stein他[AOSD2002]

アスペクトをUML図として表現する方法を提案モデリング段階のアスペクトはAspectJなどのAO

P言語に変換するもので、この方法ではMDAは実現できない

AspectMのアスペクトはUML図自身を操作するものGray他[GPCE2003]

AODM( Aspect-Oriented Domain Modeling )を提案属性や関連などのモデル要素を追加する機能をもつMDAなどの一般的なモデル変換を対象にしたものではな

いSillito他[ECOOP2004]

ユースケースレベルのポイントカットを提案上流のモデリング段階においてもJPMの考え方が有効で

あることを示した

Page 65: アスペクト指向 ソフトウェア開発

65

アスペクト指向言語の変遷

ドメイン専用AOP言語を個々に開発するアプローチ(1997年頃まで)

Weaver を開発するのが大変

汎用AOP言語( AspectJ 等: 「 Pointcut + Advice 」メカニズム)のアプローチ(現在)

拡張可能ドメイン専用AOP言語の( Xaspect 等)アプローチ(これから)

適用範囲が限定される

Page 66: アスペクト指向 ソフトウェア開発

66

アスペクト指向に関する情報源

国際会議

Aspect-Oriented Software Development (AOSD)OOPSLA, ECOOP, GPCE, ICSE, FSE, ICFP など

ポータルサイト

http://aosd.net

Page 67: アスペクト指向 ソフトウェア開発

67

おわり


Top Related