アーキテクチャ設計と実装をつなぐ インターフェース機構 archface
DESCRIPTION
アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface. Archface : An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation. 九州工業大学大学院 情報工学府 野村 潤 鵜林 尚靖. 概要. ソフトウェア開発において アーキテクチャ設計は重要な役割を担う 頑強性 信頼性 保守性. Architecture. しかし 、難しい課題もある 設計者の意図との整合性を保つ アーキテクチャデザインを正しく実装に つなげる - PowerPoint PPT PresentationTRANSCRIPT
アーキテクチャ設計と実装をつなぐインターフェース機構 Archface
Archface: An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation
九州工業大学大学院 情報工学府 野村 潤 鵜林 尚靖
1
概要 ソフトウェア開発において
アーキテクチャ設計は重要な役割を担う 頑強性 信頼性 保守性
public class Subject{ private Vector observers = new Vector(); private String state = “”; public void addObserver(Observer o){ … } public void removeObserver(Observer o){ … } public void notify(){ Iterator i = observers.iterator(); while(i.hasNext() ){ Observers o = (Observer)i.next(); o.update( this ); } } public void setState(String s){ state = s; } public String getState() {return state; }}
Progra
m Code
Archite
cture
Archface
しかし、難しい課題もある 設計者の意図との整合性を保つ アーキテクチャデザインを正しく実装に
つなげる 変更や修正による設計と実装のギャップ
をなくす Archface によって設計と実装をつなぐ
Bug 2
目次
1. アーキテクチャ設計の課題
2. Archface
3. Archface for Java
4. 議論と関連研究
5. まとめと今後の課題
3
4
1 .アーキテクチャ設計の課題4
Subject の状態が setState() により変更されるとnotify() によって Observer へ通知
アーキテクチャ設計と実装のギャップ
5
public class Subject { private String state = ""; public String getState() { return state; } … }
アーキテクチャデザイン(Observerパターン )
プログラムコード
Bug
setState() が呼ばれた後にはnotify() が呼ばれる
public void setState(String s) { state = s; }
notify の処理を行っていない
設計の詳細化では解決できない
6
Detaile
d
Model
Descriptions
完全なコードを生成
詳細設計モデルを生成
しかし、アーキテクチャ設計は抽象的でなければならない
一つの解決策としては…
public class Subject{ private Vector observers = new Vector(); private String state = “”; public void addObserver(Observer o){ … } public void removeObserver(Observer o){ … } public void notify(){ Iterator i = observers.iterator(); while(i.hasNext() ){ Observers o = (Observer)i.next(); o.update( this ); } } public void setState(String s){ state = s; } public String getState() {return state; }}
Progra
m Code
解決すべき課題 アーキテクチャ設計の抽象度
抽象度が高すぎるとコードとの乖離が大きくなる 抽象度が低すぎると実装との差異が無くなる
7
設計からコードへの洗練 設計の意図を正確にプログラム実装に反映させる
設計とコードの同期 設計に変更があった場合、コードを修正 コードに変更があった場合、設計を修正
8
2 . Archface ( = Architecture + Interface)
8
アプローチ:インターフェースとしてアーキテクチャを記述する
Archface:アーキテクチャをインターフェースに記述し、実装時にインプリメントすることで、アーキテクチャを実装へ正確に引き継ぐ
9
public class Subject{ private Vector observers = new Vector(); private String state = “”; public void addObserver(Observer o){ … } public void removeObserver(Observer o){ … } public void notify(){ Iterator i = observers.iterator(); while(i.hasNext() ){ Observers o = (Observer)i.next(); o.update( this ); } } public void setState(String s){ state = s; } public String getState() {return state; }}
Progra
m Code
Archite
cture
Archface
ADL とプログラミング言語の両方の性質を持つコンポーネントインターフェース• コンポーネントの仕様を公開
コネクタインターフェース• コンポーネントの連結を定義
● アーキテクチャを記述= ADL
● インターフェースとして機能=プログラミング言語
Archface によるアーキテクチャ設計:協調動作が表現できる
対象: Component-and-Connector アーキテクチャ
支援内容:プログラムポイントの公開、連結、協調動作の定義
1010
Observer
cflowupdateState
notifyObservers
setState
cflow
Subject
プログラムポイントの公開
ポートによるコンポーネントの連結
コントロールフローによるコンポーネント間の協調動作
getState
update
コンポーネントの定義
※ プログラムポイント=プログラム上の実行点( OOP におけるメソッド実行点)
出力ポート:プログラムポイントの出力
入力ポート:プログラムポイントの入力
××
×
×
×
モデル基盤:AOP 、3部モデリングフレームワークを応用
11
Join point
Three-part Modeling Framework
[Masuhara, et al. 2003]
2つの関心事とコーディネーションの3要素から構成される
12
3 . Archface for Java
12
Observer
cflowupdateState
notifyObservers
setState
cflow
Subject
getState
update
ADL としての Archface :アーキテクチャ記述=ポートとコネクタの定義
13
Observer パターン
ADL[Port notifyObservers]pointcut notifyObservers() : cflow(execution(void setState(String s))) && call(void notify());
※setState を実行し、そのコントロールフロー下で notify を呼び出す点を入力ポートとして公開
[Port update]pointcut update():execution(void update());
※update メソッドの実行点を出力ポートとして公開
[Connection]connects notifyChange (port1 :cSubject.notifyObservers, port2 :cObserver.update){ around() void :port1 { port2.proceed(); }}
※notifyObservers と update の2つのポートを連結
コンポーネントインターフェース
コネクタインターフェース
setState 実行後にそのコントロールフロー下で update を実行する
プログラムインターフェースとしての Archface :Archface の実装=プログラムポイントの公開とフローの遵守
14
Archface(プログラムインターフェース )
Implement
プログラムコード(プログラムポイントを公開するように実装 )
プログラムポイントsetState を公開している
setState から notify に到達する過程は問わない = Archface には実装が含まれない
×コンパイルエラーにより通知 =アーキテクチャに沿う実装を保証
15
4 .議論と関連研究15
Archface による課題の解決
1) アーキテクチャ設計の抽象度 インターフェースとしてアーキテクチャをカプセル化
2) 設計からコードへの洗練 インターフェースに沿ったコーディング
3) 設計とコードの同期 インターフェースを通じた設計とコードの同期
16
関連研究
ArchJava [Aldrich, J. 2002] アーキテクチャとプログラム実装を統合 実装がアーキテクチャ制約と適合することを保証
Design pattern implementation in Java and AspectJ [Hannemann, J. 2002] アーキテクチャを抽象クラス間の協調動作として記述 AspectJ を用いてデザインパターンをアスペクトとして分離
Co-evolution between design and implementation [D'Hondt, T. 2001] アーキテクチャデザインと実装の共進化
17
18
5 .まとめと今後の課題18
まとめと今後の課題
Archface : アーキテクチャ設計とプログラム実装をつなぐ
インターフェース機構 プログラムポイントのコーディネーションをインターフェー
スに記述 ADL とプログラミング言語の両方の性質を持つ
今後の課題 他のアーキテクチャ記述(データフロー、イベントトレー
スなど) それに基づくポイントカットの導入
19
20
ご清聴ありがとうございました
20