アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ

AOPミニワークショップ
SPA-SUMMER 2004
アスペクト指向に基づく
拡張可能な
MDAモデルコンパイラ
九州工業大学
情報工学部 知能情報工学科
鵜林尚靖
2004年8月24日
1
MDAとは
従来の開発
MDAによる開発
分析
CIM
PIM
設計
PSM
コーディング
設計フェーズが
大きく変化!
モデルコンパイラ
による自動変換
ソース・コード
MDA: Model-Driven Architecture
PIM: Platform Independent Model
CIM: Computation Independent Model PSM: Platform Specific Model
2
モデル変換の例(Strutsの場
合)
ステップ1: 複数PIMの合成
①PIMクラスのマージ
ステップ2: アクションフォーム
Beanへの変換
②Bean規約名に変更
③ActionFormを継承
④setter/getterを追加
ステップ3: アクションクラス
の新規作成
⑤アクションクラスを生成
⑥Actionを継承
⑦executeメソッドを追加
⑧メソッド本体を追加
PIM
PSM
3
研究のアプローチ
MDAの課題
モデル作成者自身がアプリケーションの特性や目的に応
じてモデル変換規則を定義するのが難しい eg. QVT
アスペクト指向に基づいたモデルコンパイラ
モデリング言語AspectM
ゴール
 モデル作成者はモデリングの一環としてアスペクトを定
義することにより、モデルコンパイラの機能を拡張できる
 モデル変換記述も通常のモデリングも同じ土俵で考える
ことができる(モデリングレベルのメタプログラミング)
4
何故、アスペクト指向なのか?
(研究のモチベーション)




MDAにおけるモデル変換は実装に関わる部分の変
換であるが、モデル変換の対象はこれに留まらない。
最適化、等々。Active Library の考え方をモデルコン
パイラに導入する必要はないか?
実装に関わる部分は横断的関心事。
アスペクトはソフトウェアモジュールであると同時
に変換モジュールである。この2面性を考えると、
システムの構成要素と変換規則を同じモジュール化
メカニズム(アスペクト)で実現できる可能性があ
る。
上流段階(ユースケースや設計レベル)でのアスペ
クト指向サポートとMDAサポートを同じメカニズ
ムで実現できる。
5
AOPのメカニズム
JPM
Join Point
メソッド呼び出し
メソッド実行
・
・
元ソース
Advice
実行コード
・・・・・・
---
・・・・・・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
---
・・・・・・
---
Point Cut
AOP: Aspect-Oriented Programming
JPM: Join Point Model
6
AOPとMDA


JPM においてのadviceはプログラム変換と呼
ぶことができる
JPMでモデル変換を記述することが可能にな
るのでは
Join Point
クラス名
Advice
クラス名
属性
・・・
属性①
属性②
操作
・・・
操作
・・・
クラス図
Point Cut
7
以降の内容






拡張可能なモデルコンパイラの考え方
モデル変換のためのJPM(Join Point
Model)
AspectMの概要
AspectMの実装(開発中)
関連研究
まとめ
8
拡張可能モデルコンパイラの考え方
アスペクト
アスペクト
アスペクト図
(モデル変換モジュール
(モデル変換モジュール
(モデル変換モジュール
としてのアスペクト)
としてのアスペクト)
としてのアスペクト)
アスペクトを追加する
ことにより様々な変換
を可能にする
UMLモデル
(クラス図)
weave
UMLモデル
(クラス図)
モデルコンパイラ
アスペクト図
(システム構成モジュール
としてのアスペクト)
9
MDAはどう変化するか?
モデル
モデル
モデル
PIM
PSM
プログラムコード
XML
XML
XML
XMLで記述された
アスペクト
XMLで記述された
アスペクト
10
モデル変換のためのJPM
モデル変換機能
操作本体の変更
クラスのマージ
クラスの追加/削除
PA
CM
NE
OC
RN
RL
○
①PIMクラスのマージ
CM
②Bean規約名に変更
○
RN
○
③ActionFormを継承
操作の追加/削除
○
属性の追加/削除
○
RL
④setter/getterを追加
クラス名の変更
○
操作名の変更
○
属性名の変更
○
OC
⑤アクションクラスを生成
NE
⑥Actionを継承
継承の追加/削除
○
集約の追加/削除
○
関連の追加/削除
○
PA(pointcut & advice),CM(composition),NE(new element),
OC(open class),RN(rename),RL(relation)
RL
⑦executeメソッドを追加
OC
⑧メソッド本体を追加
PA
11
AspectMの概要
6つのJPMをサポート(新たなJPMを追加可能)
3種類のアスペクトをサポート(通常アスペクト、コンポーネント
アスペクト、テンプレートアスペクト)
UMLを対象としたXMLベースのAOP言語
ダイアグラム表記
aspect
<< jpm-type >>
aspect-name
pointcut-name : joinpoint-type
{ pointcut-body }
:
:
advice-name [pointcut-name]: advice-type
{ advice-body }
:
:
ダイアグラム保存形式(XMLベース)
<aspect name=aspect-name type=jpm-type >
{ <pointcut name=pointcut-name
type=joinpoint-type>
pointcut-body
</pointcut> } +
{ <advice name=advice-name
type=advice-type>
<ref-pointcut>pointcut-name </pointcut>
<advice-body>advice-body </advice-body>
</advice> } +
</aspect>
12
AspectMのJPM
JPM
Join point
PA
operation
CM
class
NE
class-diagram
OC
class
RN
class, operation, attribute
RL
class
Pointcut
Advice
before,
after,
around
merge-by-name
記述例
① setX || setY
② set*
③ classA || classB
④ class*
add-class
delete-class
add-operation,
delete-operation,
add-attribute,
delete-attribute
rename
add-inheritance,
delete-inheritance,
add-aggregation,
delete-aggregation,
add-relationship,
delete-relationship13
MessageクラスとMessageProfileクラスを
AspectMの記述例
マージしてPostMessageクラスに変換
aspect
<< CM >>
merge-message-classes
message-classes : class
{ Message || MessageProfile }
merge-message-classes [message-classes]
: merge-by-name
{ PostMessage }
<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>
14
AspectMにおける部品合成
<aspect name=“Generic-Class2ActionForm“ type=“template”>
<params>
<param>@aspect@</param>
<param>@class@</param>
</params>
<aspect name=“Class2ActionForm” type=“component”>
テンプレート
アスペクト
コンポーネント
アスペクト
<aspect name=concat(“RN_”,@aspect@) type=“RN”>
…
</aspect>
<aspect name=concat(“RL_“,@aspect@) type=“RL” >
…
</aspect>
通常アスペクト
<aspect name=concat(“OC_“,@aspect@) type=“OC” >
…
</aspect>
</aspect>
</aspect>
15
当研究室で開発中のツール
モデルエディタ
PIM
クラス図
アスペクト図
PSM
クラス図
アスペクト図
ユ
ー
ザ
イ
ン
タ
ー
フ
ェ
ー
ス
Javaソース
メ
タ
モ
デ
ル
XML
文書
モデルコンパイラ
XML
文書
モデルコンパイラ
XML
文書
Eclipse
16
AspectMのメタモデル(プロト
タイプ)
アスペクトの
メタモデル
17
モデルコンパイラの実装(プロトタイ
プ)
アスペクト図
「アスペクト図→XMI形式」変換
XMI形式アスペクト
「XMI形式アスペクト→XSLT変換
ルール」変換
XSLT変換ルール
クラス図
(PIM)
XSLT処理系
クラス図
(PSM)
18
関連研究
Stein他[AOSD2002]
アスペクトをUML図として表現する方法を提案
モデリング段階のアスペクトはAspectJなどのAOP言語に変換
するもので、この方法ではMDAは実現できない
AspectMのアスペクトはUML図自身を操作するもの
Gray他[GPCE2003]
AODM(Aspect-Oriented Domain Modeling)を提案
属性や関連などのモデル要素を追加する機能をもつ
MDAなどの一般的なモデル変換を対象にしたものではない
Sillito他[ECOOP2004]
ユースケースレベルのポイントカットを提案
上流のモデリング段階においてもJPMの考え方が有効であるこ
とを示した
19
まとめ


MDAのモデルコンパイラをアスペクトを組
み合わせることにより実現する方式を提案
従来別々の概念と考えられていたアスペクト
指向とMDAを同じ枠組みで捉えることが可
能になった
20