プログラム再構成に関する 特許申請について

ソフトウェア工学
知能情報学部
新田直也
オブジェクト指向以降の流れ




オブジェクト指向は生産性,再利用性,保守性をある程度向
上させた.
プログラミングパラダイムとして誕生したオブジェクト指向は,
その後分析,設計方法論として発展する.(基本的には
ウォーターフォールモデルに基づく.)
その中で,表記法だけでも統一しようということで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パターン

解法:
アトミックコンポーネント
コンテナ
まとめ

デザインパターンはオブジェクト指向ソフトウェアの
設計に出現するパターンをカタログ化したもの.


熟練者のノウハウが凝縮されている.
現在では「共通言語」になりつつある.
オブジェクト指向を用いて設計する上での指針にな
る.
 産業界の方が学術界より進んでいる?
 パターンの背景にある論理は何か?



メタパターン
マルチパラダイムデザイン