ソフトウェア開発手法の最前線 ~ アスペクト指向、MDA、MIC ~

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
メタモデル記述を用いた成果物間の依存関係追跡手法
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
アルゴリズムとプログラミング (Algorithms and Programming)
九州工業大学 情報工学部 知能情報工学科 鵜林尚靖 2004年10月15日
Riding the Design Wave II
九州工業大学 情報工学部 知能情報工学科 鵜林尚靖 2005年7月16日
アスペクト指向プログラミングに 関する十の神話
Dynamic AOPと その実装手法について
ソフトウェア工学 知能情報学部 新田直也.
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
C#とC++とオブジェクト指向 上甲 健史.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
契約に基づいたアスペクト指向リファクタリングの検証
ソフトウェア工学 知能情報学部 新田直也.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
組込みシステムの外部環境分析のためのUMLプロファイル
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
UMLモデルを対象とした リファクタリング候補検出の試み
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
契約による クラスとアスペクト間の 影響解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
拡張可能なアスペクト指向モデリングにおける織り合わせの検証
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
設計情報の再利用を目的とした UML図の自動推薦ツール
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
1.2 言語処理の諸観点 (1)言語処理の利用分野
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

ソフトウェア開発手法の最前線 ~ アスペクト指向、MDA、MIC ~ 東芝情報システム(株)殿向け チュートリアル ソフトウェア開発手法の最前線 ~ アスペクト指向、MDA、MIC ~ 九州工業大学 情報工学部 知能情報工学科 鵜林尚靖 2005年9月12日

内容 アスペクト指向の背景 アスペクト指向の概要 アスペクト指向、MDA、そしてMIC アスペクト指向の今後 研究室の紹介

ソフトウェア開発手法の変遷 構造化手法 オブジェクト指向手法 MDA アスペクト指向 60 年代 70 年代 80 年代 90 年代 2000 年代 構造化手法 オブジェクト指向手法 構造化プログラミング 構造化分析 構造化設計 OOP OOA OOD パターン フレームワーク コンポーネント EA プロダクトライン アジャイル, XP MDA アスペクト指向

1.アスペクト指向の背景

アスペクト指向とは何? 一言でいうと 「モジュール化メカニズム」の一つ

モジュール化メカニズムの歴史 構造化 機能中心のため、データの変更に対して脆い データ抽象 データとそれに関連する操作をまとめてしまおう 抽象データ型 データとそれに関連する操作をまとめて型にしよう オブジェクト指向 継承機構も入れて、再利用性を高めよう

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

良いモジュール化 1箇所にモジュール化されている org.apache.tomcat におけるXML parsing 機能要件を きれいにモジュール化 org.apache.tomcat におけるXML parsing 赤い線はXML parsingを行うコード行を示す 1箇所にモジュール化されている AspectJ. http://eclipse.org/aspectj/より抜粋

(Crosscutting Concerns) しかし、ログ処理の場合は... 複数のオブジェクトにまたがる (Crosscutting Concerns) org.apache.tomcat におけるログ処理 赤い線はログ処理を行うコード行を示す 1箇所ではない しかも、数多くの場所に分散している(tangling and scattering) AspectJ. http://eclipse.org/aspectj/より抜粋

現実のモジュール化は... ソフトウェア構造 要求分析 設計 実装 問題 領域 (問題意識) 分析時の 関心事 設計時の 関心事 モジュールの 構成 (問題意識)  上流の関心事が、下流に行くにしたがって構造的に分散してしまう  (オブジェクト指向でも解決できない問題がある)

従来手法の問題 オブジェクト指向プログラミングは、機能要件のカプセル化には優れているが、横断的関心事( Crosscutting Concerns )の表現には必ずしも向いていない。 <横断的関心事の例> ・エラーチェック戦略 ・セキュリティ ・デザインパターン ・同期制御 ・資源共有 ・分散にかかわる関心事 ・性能最適化 ・プラットフォーム 性能最適化のためのコードを追加しようとすると、コードが複数のオブジェクトに分散してしまい、見通しの悪いプログラムになってしまう。「分かりやすく性能も良い」プログラムを作るのが難しい。

ソフトウェアの構造 最適化 メモリ容量 HW特性 プラットフォーム 応答性 きれいなプログラムを作成したい! でも、プラットフォーム適合、HW特性、性能向上、例外 のためのコードを追加すると どんどんプログラムが汚くなってしまう。。。

解決方法 MIC (Model-Integrated Computing) AOP (Aspect-Oriented Programming) IP (Itentional Programming) GenVoca 今日はアスペクト指向について紹介 アスペクト指向と絡めて、MDA、MICについて紹介

2.アスペクト指向の概要

アスペクト指向を実現する 言語処理系、システム AspectJ (Gregor Kiczales, et al.) Hyper/J, CME (Harold Ossher, et al.) DemeterJ (Karl J. Lieberherr, et al.) Composition filters (Mehmet Aksit, et al.) Caesar (Mira Mezini, et al.) JBoss-AOP AspectWerkz J2EE環境への適用が増えている! POJO(Plain Old Java Object) 今日はAspectJベースで紹介

AOP(Aspect-Oriented Programming) オブジェクト (通常の機能) weaver プログラム アスペクト (オブジェクトに またがる関心事) ・複数のオブジェクトにまたがる関心事を見通しよく記述できる! ・「分かりやすく性能も良い」プログラムが作れる!

AOPのメカニズム JPM(Join Point Model) aspect PublicErrorLogging { static Log log = new Log(); pointcut publicInterface (): target (mypackage..*) && call (public * *(..)); after() returning (Object o): publicInterface() { System.out.println(thisJoinPoint); } after() throwing (Error e): publicInterface() { log.write(e); メソッド呼び出し、 変数参照/更新など の実行点を捕まえる weaving ログ処理コードの埋め込み (advice) プログラム上の様々な実行点 (join point) 実行点の取り出し (pointcut) 実行点の中からログ処理に関わる部分を抽出

AspectJの主要概念 振る舞いへの作用 ジョインポイント(join point) ポイントカット(pointcut) アドバイス(advice) 構造への作用 インタータイプ定義 declare句による宣言

簡単なAspectJプログラム HelloWorld.java Trace.java アスペクト インタータイプ 定義 HelloWorld.java Trace.java public class HelloWorld { public static void main ( String [], args) { HelloWorld app = new HelloWorld (); app.hello(); } void hello() { System.out.println(“こんにちは!”); 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 + “呼び出し後”); ポイントカット アドバイス 「AspectJによるアスペクト指向プログラミング入門」 長瀬、天野、鷲崎、立堀(著) より

例題: 簡易図形エディタ * operations that move elements Display Figure 例題: 簡易図形エディタ Display * Figure makePoint(..) makeLine(..) FigureElement moveBy(int, int) operations that move elements Point getX() getY() setX(int) setY(int) moveBy(int, int) Line getP1() getP2() setP1(Point) setP2(Point) moveBy(int, int) 2 AspectJ. http://eclipse.org/aspectj/より抜粋

通常の保守、改良 class Line { class Point { class Line { class Point { 変更が複数の 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; 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; 変更が複数の クラスに散らば ってしまう! AspectJ. http://eclipse.org/aspectj/より抜粋

AspectJによる保守、改良 変更が1つのアスペクトに局所化される! class Line { class Point { 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; 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); } 変更が1つのアスペクトに局所化される! AspectJ. http://eclipse.org/aspectj/より抜粋

クラスを横断するアスペクト * Display Figure makePoint(..) makeLine(..) FigureElement moveBy(int, int) Point getX() getY() setX(int) setY(int) moveBy(int, int) Line getP1() getP2() setP1(Point) setP2(Point) moveBy(int, int) 2 DisplayUpdating AspectJ. http://eclipse.org/aspectj/より抜粋

3.アスペクト指向、MDA、   そしてMIC

(1) MDA

現状の課題(オブジェクト指向分析、設計) モデルの再利用は限定的: 分析や設計時のモデル資産を蓄積することにより、ある程度の再利用部品化が可能。しかし、オブジェクト指向による設計モデルの多くは実装に依存する部分と依存しない部分が明確に切り分けられていない場合が多く、再利用の範囲は限定的。 人手によるモデル間の変換: 分析モデルから設計モデルへの変換、設計モデルからプログラムコードへの変換は多くの場合人手で行われている。せっかくモデルを作成しても、直接プログラムコードにはつながらない。

MDA(Model-Driven Architecture)とは 実装技術(J2EEや.NETなど)から分析/設計を独立させ、設計情報が実装技術に左右されないようにする技術 分析/設計部分はプラットフォームに 依存しない為、再利用可能 UML2の目玉

MDAと従来プロセスの違い 従来の開発 MDAによる開発 設計フェーズが 大きく変化! CIM 分析 PIM 設計 PSM コーディング モデルコンパイラ による自動変換 PSM コーディング ソース・コード CIM: Computation Independent Model PIM: Platform 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のメリット コード中心開発からモデル中心開発へパラダイムシフト: 開発者は特定のプラットフォームやプログラミング技術にとらわれることなく、PIMの開発に全力を注ぐことができる。 新しいタイプのコンポーネント化: PIMモデル部品とモデル変換規則をライブラリ化することにより、様々な機能やプラットフォームに対応したプロダクト群を生成することが可能になり、プロダクトライン型開発の実現につながる。

MDA実現のための鍵 厳密なモデル表記 (MOF、OCL) 厳密なモデル変換定義 (QVT) QVTの例 厳密なモデル表記 (MOF、OCL) 厳密なモデル変換定義 (QVT) QVTの例 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)) ] } MOF: Meta Object Facility OCL: Object Constraint Language QVT: Queries, Views, and Transformations

(2)アスペクト指向との接点

何故、アスペクト指向なのか? プラットフォームに関わる部分は横断的関心事。 → アスペクトが得意とするところ      → アスペクトが得意とするところ モデル変換の対象はプラットフォームのみに留まらない。最適化、等々。      → 現状のMDAはモデル変換の一部しか         捉えていない 上流段階(ユースケースや設計レベル)でのアスペクト指向サポートが必要。セキュリティなどの横断的関心事はモデリング段階で考える必要がある。       → Early Aspect

MDAとアスペクト指向 PIMモデル(UML) アプリケーション 実装環境対応コード weaving アプリケーション 実装環境対応コード マッピングルール(MOF QVT) アスペクト記述言語 「AspectJによるアスペクト指向プログラミング入門」 長瀬、天野、鷲崎、立堀(著) より

我々の研究室での研究事例 アスペクト指向に基づく拡張可能なモデルコンパイラ Naoyasu Ubayashi, Tetsuo Tamai, Shinji Sano, Yusaku Maeno, Satoshi Murakami: Model Compiler Construction Based on Aspect-Oriented Mechanisms, 4th ACM SIGPLAN International Conference on Generative Programming and Component Engineering (GPCE 2005), to appear

当研究室のAspectMモデルコンパイラ アスペクト (モデル変換モジュール としてのアスペクト) アスペクト図 XML アスペクトを追加することにより様々な変換を可能にする weave UMLモデル (クラス図) UMLモデル (クラス図) XML XML モデルコンパイラ アスペクト図 (システム構成モジュール としてのアスペクト) アスペクト指向メカニズムにより モデルコンパイラを実現! XML

モデルレベルのアスペクト指向 JPMの概念を拡張(通常のAspectJにおけるJPMとは異なる) join point (class) pointcut advice classA classA || classB) add new attributes add new operations classA attributes new attributes attributes operations new operations operations classB classB attributes join point (class) attributes new attributes operations 横断的関心事(プラットフォームなど)をモデルに挿入 classC operations new operations join point (class) attributes operations JPMの概念を拡張(通常のAspectJにおけるJPMとは異なる)

モデル変換のためのJPM モデル変換機能 PA CM NE OC RN RL 操作本体の変更 ○ クラスのマージ クラスの追加/削除 操作の追加/削除 属性の追加/削除 クラス名の変更 操作名の変更 属性名の変更 継承の追加/削除 集約の追加/削除 関連の追加/削除 PA(pointcut & advice),CM(composition),NE(new element),OC(open class),RN(rename),RL(relation)

モデル変換のための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

<< 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 </advice> <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 } :

Model Editor (Eclipse UML) AspectM 支援ツール Model Editor (Eclipse UML) Model Compiler UML diagrams XMI (PIM) Aspect diagrams XMI XSLT style sheet XMI (PSM) AspectM metamodel XSLT style sheet (EMF) Java code

アスペクト導入のためのメタモデル Class UMLメタモデル を拡張 Aspect

(3)MDAからMICへ

(DSL: Domain-Specific Modeling Language) MDAの先にあるもの MDA: プラットフォームに関する関心事を分離 アスペクト指向: プラットフォームのみならず、モデリング段階           の横断的関心事を分離 ドメイン指向モデリング ドメイン専用モデリング言語 (DSL: Domain-Specific Modeling Language)

Model-Integrating Computing (MIC) Vanderbilt Univ. のISIS(Institute for Software Integrated Systems)で研究開発。 ドメイン専用モデリング環境を提供。 アスペクト指向への応用は、J.Gray (現在、Univ. of Alabama )が研究。AODM(Aspect-Oriented Domain Modeling)を提案。

Model-integrated approach to software composition [出典] Janos Sztipanovits and Gabor Karsai: Generative Programming for Embedded Systems, GPCE2002, LNCS2487, pp.32--49, 2002

Meta-modeling language architecture 適用例 [出典] Janos Sztipanovits and Gabor Karsai: Generative Programming for Embedded Systems, GPCE2002, LNCS2487, pp.32--49, 2002

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

アスペクト指向の今後 歴史は繰り返す... 現在、プログラミング周りで研究が活発(80年代のOOP研究を彷彿させる) 今後は、適用事例の拡大、開発方法論の整備、アスペクトコンポーネント・フレームワークの整備に向かって行くと思われる(90年代のOOソフトウェアエンジアリングの発展に類似) 歴史は繰り返す...

AOSD ソフト開発工程全体への波及 AOP(Aspect-Oriented Programming) から AOSD(Aspect-Oriented Software Development) へ AO: Aspect-Oriented 要求分析 設計 実装 Early Aspect AO Design Pattern AO Language AO Modeling AO Framework AO Component Aspect Mining AO Database

上流段階のアスペクト研究例 Stein他[AOSD2002] Gray他[GPCE2003] Sillito他[ECOOP2004] アスペクトをUML図として表現する方法を提案 モデリング段階のアスペクトはAspectJなどのAOP言語に変換するもので、この方法ではMDAは実現できない AspectMのアスペクトはUML図自身を操作するもの Gray他[GPCE2003] AODM(Aspect-Oriented Domain Modeling)を提案 属性や関連などのモデル要素を追加する機能をもつ MDAなどの一般的なモデル変換を対象にしたものではない Sillito他[ECOOP2004] ユースケースレベルのポイントカットを提案 上流のモデリング段階においてもJPMの考え方が有効であることを示した

アスペクト指向言語の変遷 ドメイン専用AOP言語を個々に開発するアプローチ (1997年頃まで) Weaverを開発するのが大変 汎用AOP言語(AspectJ等: 「Pointcut+Advice」メカニズム)のアプローチ (現在) 適用範囲が限定される 拡張可能ドメイン専用AOP言語の(Xaspect等)アプローチ (これから)

アスペクト指向に関する情報源 ポータルサイト http://aosd.net 国際会議 Aspect-Oriented Software Development (AOSD) OOPSLA, ECOOP, GPCE, ICSE, FSE, ICFP など

5.研究室の紹介

最近の主な研究 Naoyasu Ubayashi and Tetsuo Tamai: Aspect-Oriented Programming with Model Checking, 1st International Conference on Aspect-Oriented Software Development (AOSD 2002) Kouhei Sakurai, Hidehiko Masuhara, Naoyasu Ubayashi, Saeko Matsuura, and Seiichi Komiya: Association aspects, 3rd International Conference on Aspect-Oriented Software Development (AOSD 2004) Tetsuo Tamai, Naoyasu Ubayashi, and Ryoichi Ichiyama: An Adaptive Object Model with Dynamic Role Binding, 27th IEEE/ACM International Conference on Software Engineering (ICSE 2005) Naoyasu Ubayashi, Tetsuo Tamai, Shinji Sano, Yusaku Maeno, Satoshi Murakami: Model Compiler Construction Based on Aspect-Oriented Mechanisms, 4th ACM SIGPLAN International Conference on Generative Programming and Component Engineering (GPCE 2005), to appear Naoyasu Ubayashi, Genki Moriyama, Hidehiko Masuhara, and Tetsuo Tamai: A Parameterized Interpreter for Modeling Different AOP Mechanisms, 20th IEEE/ACM International Conference on Automated Software Engineering (ASE 2005), to appear

現在進行形の研究 Weaving by Contract Contract Generator for AO Refactorings Class-based AOP Language Reflective AOP Language

おわり