Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソフトウェア工学 知能情報学部 新田直也.

Similar presentations


Presentation on theme: "ソフトウェア工学 知能情報学部 新田直也."— Presentation transcript:

1 ソフトウェア工学 知能情報学部 新田直也

2 再利用の進化 オブジェクト指向は再利用のための技術. 構造化指向ではライブラリ単位で部品(呼び出される側)を再利用.
オブジェクト指向ではフレームワーク単位で骨組み(呼び出し側)を再利用. アプリケーションA ライブラリ アプリケーションB アプリケーションA フレームワーク アプリケーションB

3 アプリケーションフレームワーク アプリケーションフレームワーク: 特定のドメイン(対象領域)向け.
ドメイン内で共通に使える親クラス(抽象クラス)の集合. 主に呼び出し側を再利用. 多相性によってフレームワーク側からアプリケーション側が呼び出される(制御の反転). ハリウッドの原則:「俺に電話するな.必要ならこちらから電話する.」

4 制御の反転と多相性(1) abstract class FrameworkMain { FrameworkSub sub; void mainLoop() { // メインループ for (;;) { sub.proc(); // この呼び出しで制御が反転 } abstract class FrameworkSub { abstract void proc(); // アプリケーション毎の処理 フレームワーク側

5 制御の反転と多相性(2) class ApplicationMain extends FrameworkMain { void main() { sub = new ApplicationSub(); // 依存性の挿入 mainLoop(); } class ApplicationSub extends FrameworkSub { void proc() { // 制御の反転で呼び出される // アプリケーション固有の処理を行う アプリケーション側

6 フレームワークの例 PCアプリ スマホアプリ Webアプリ データベース ビッグデータ Swing, AWT, …
Android SDK, iOS SDK, … Webアプリ Struts, Spring, Jersey, … データベース Hibernate, iBatis, … ビッグデータ Hadoop, …

7 Swingの場合(1) abstract class Component… { // GUI部品クラス MouseListener listener; void processMouseEvent(…) { // 共通の処理 : listener.mouseClicked(…); // 制御の反転の発生 } interface MouseListener … { // マウスイベント処理用 void mouseClicked(…); フレームワーク側

8 Swingの場合(2) class MyListener extends MouseListener … { void mouseClicked(…) { //制御の反転で呼び出される // アプリケーション毎のクリック時の動作 } アプリケーション側

9 Androidの場合 class Activity extends … { // 全アプリ共通の画面クラス void performCreate(…) { // 共通の処理 onCreate(…); // この呼び出しで制御が反転 } void onCreate(…) { class AppActivity extends Activity { // アプリ固有画面 void onCreate(…) { // 制御の反転で呼び出される // アプリ固有の画面初期化処理 } フレームワーク側 アプリケーション側

10 再利用の現状 フレームワークは一定の成果を生んでいる. ただし,最初から良いフレームワークを設計することは困難.
たとえ良いフレームワークを開発できたとしても,開発者以外がそれをうまく再利用することは困難. 再利用の方法が複雑で開発者しかわからない. 適用可能範囲が微妙で開発者しかわからない.


Download ppt "ソフトウェア工学 知能情報学部 新田直也."

Similar presentations


Ads by Google