ソフトウェア工学 知能情報学部 新田直也 オブジェクト指向以降の流れ オブジェクト指向は生産性,再利用性,保守性をある程度向 上させた. プログラミングパラダイムとして誕生したオブジェクト指向は, その後分析,設計方法論として発展する.(基本的には ウォーターフォールモデルに基づく.) その中で,表記法だけでも統一しようということでUMLが誕 生する. 一方で,実規模ソフトウェアの設計に適用されていく中でオ ブジェクト指向技術はさらに発展してきた. 設計のパターンを抽出,分類 → デザインパターン アプリケーションの典型的な骨組みを再利用 → フレームワーク オブジェクト指向は開発プロセスモデルそのものも変えた. スパイラルモデル,アジャイル(agile)開発 デザインパターンとフレームワーク オブジェクト指向を実規模ソフトウェアの設計に適用されてい く中で発展してきた技術. オブジェクト指向ソフトウェアの設計(複数クラスによる協調) には一定のパターンが見られることが知られていた.それら のパターンに名前をつけカタログ化したものがデザインパ ターン(design pattern)である. 一方,多くのアプリケーションで基本設計の部分は似通って いる.基本設計を表すソースコードを多くのアプリケーション で使いまわしできるよう取り出したものがフレームワーク (framework)である. パターンが形式であるのに対し,フレームワークは実際の ソースコードであることに注意すること. デザインパターンの誕生 デザインパターンは,E. Gamma, R. Helm, R. Johnson, J. Vlissides らによって1995年に提唱される. この4人は GoF (Gang of Four)と呼ばれている. MVCアーキテクチャなど,設計にいくつかのパターンが存在 することは広く開発者に(暗黙に)了解されていた. デザインパターンは,Alexander の建築設計におけるパ ターンに関する議論を土台としている. 「それぞれのパターンは我々の身のまわりで何回も起きる問 題,および,それぞれの問題に対する解法のポイントを記述 している.そこで我々は,これらの解法を何万回でも使うこと ができる.同じ問題に対する同じ解法を何度も何度も最初か ら考え直さずに済むというわけだ」 デザインパターンの要素 現在,23種類のデザインパターンが知られている. 各パターンは次の4つの基本的な要素を有してい る. 1. 2. 3. 4. パターン名: パターンの名前 問題: パターンが適用される問題 解法: パターンの実際の構成 結果: パターンを用いることによる結果 23個のパターンは以下の3グループに分類される. 生成に関するパターン: 5個 構造に関するパターン: 7個 振る舞いに関するパターン: 11個 MVCアーキテクチャ SmallTalkのコミュニティで古くから使われていた. MVCは,Model/View/Controllerの略.これらはユーザイ ンタフェースを構成する3つの(抽象)クラスの名前である. MVCでは,Observer,Composite,Strategy などさまざ まなパターンが使われていた. ユーザインタフェース 表示 アプリケーション ロジック View Model 入力 Controller データを保持 Observerパターン(1) Model と View の間のパターンである. Observers (Views) 90 4 月 13% 80 1 月 13% 70 60 2 月 17% 50 東京 名古屋 40 大阪 1月 東京 名古屋 大阪 2月 20.4 30.6 45.9 3月 27.4 38.6 46.9 4月 90 34.6 45 20.4 31.6 43.9 30 20 3 月 57% 10 0 1 月 2 月 3 月 4 月 表示の更新 データの要求,変更 d[0][0] = 20.4 d[0][1] = 27.4 : Subject (Model) Observerパターン(2) 問題: 論理的な情報はSubjectが保持し,外観に関する情報は各 Observerが有する. 1つのSubjectに対して,対応するObserverの数は動的 に変化する. Subjectの情報の変更は,即座にObserverに反映され る. Observerに対する変更は,必要に応じてSubjectに反映 される. Subjectの具象クラスは複数存在し,具象クラスによって保 持している論理情報は異なる. Observerの具象クラス(表クラス,棒グラフクラス,円グラ フクラスなど)も複数存在している. Observerの具象クラ スは自分に対応しているSubjectの具象クラスを知ってい Observerパターン(3) 不適切な解法1: → 複数種ある Subject に対応できない. Observerパターン(4) 不適切な解法2: ConcreteSubject1 → ConcreteObserver1, ConcreteObserver2 ConcreteSubject2 → ConcreteObserver3 → これでは具象Subject の状態を取得できない. Observerパターン(5) 解法: Observerパターン(6) パターンとして整理しておくと… Observerパターン(7) シーケンス図による表現 anotherObject : ConcreteObject aSubject : ConcreteSubject setState() aObject : ConcreteObject Notify() Update() GetState() Update() GetState() Factory Methodパターン 問題:抽象アプリケーションはドキュメントを生成し保持する が,具体的なドキュメントのクラスを知らないため,自身では ドキュメントをインスタンス化できない. 解法: フレームワーク側 アプリケーション側 Compositeパターン 問題:オブジェクトを集約を用いて木構造に組み立てる際, 個々のオブジェクトとそれらを合成したものを一様に扱いた コンテナ い. 例: AWTのコンポーネントとコンテナ トップレベル コンポーネント 中間コンポーネント アトミック コンポーネント Compositeパターン 解法: アトミックコンポーネント コンテナ まとめ デザインパターンはオブジェクト指向ソフトウェアの 設計に出現するパターンをカタログ化したもの. 熟練者のノウハウが凝縮されている. 現在では「共通言語」になりつつある. オブジェクト指向を用いて設計する上での指針にな る. 産業界の方が学術界より進んでいる? パターンの背景にある論理は何か? メタパターン マルチパラダイムデザイン
© Copyright 2024 ExpyDoc