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