目 次

目
次
序章に代えて ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・3
謝
辞
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 11
第一部
概 説
第 1 章 パターンとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 25
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 25
1.1
「パターン」とは
1.2
パターン技術はなぜ必要か ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 27
1.3
デザインパターンを例にしたパターン解説 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 30
1.4
ソフトウェアパターンの歴史
1.5
ソフトウェアパターンの広がり ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 36
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 36
(1)
アナリシス(分析)パターン(analysis pattern)・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 36
(2)
アーキテクチャパターン(architectural pattern)
(3)
コーディングのためのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 37
(4)
プロジェクト管理のためのパターン・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 37
(5)
アンチパターン(anti-pattern) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 38
・・・・・・・・・・・・・・・・・・・・・・・・・・ 37
1.6
パターンランゲージとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 38
1.7
パターンに関する活動 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 41
1.8
パターンの今後 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 42
1.9
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 44
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 45
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 46
13
第二部
いろいろなパターン
第 2 章 ソフトウェア設計のためのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 49
2.1
ソフトウェア設計のためのパターンの種類 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 49
2.2
アーキテクチャパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 53
2.2.1
アーキテクチャパターンとは
2.2.2
POSA アーキテクチャパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 54
2.2.3
その他のアーキテクチャパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 58
2.3
デザインパターン
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 53
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 62
2.3.1
デザインパターンとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 62
2.3.2
GoF デザインパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 62
2.3.3
その他のデザインパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 68
2.4
イディオム
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 70
2.4.1
イディオムとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 70
2.4.2
イディオム
2.4.3
そのほかの言語のイディオム
2.4.4
リファクタリング
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 70
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 72
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 72
ソリューションドメイン指向のパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 75
2.5
2.5.1
(1)
J2EE パターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 75
J2EE パターンとは
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 75
2.5.2
J2EE パターンカタログ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 77
2.5.3
その他のパターン
2.6
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 82
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 84
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 85
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 87
第 3 章 スタイルのためのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 89
3.1
はじめに ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 89
3.2
スタイルパターンの例 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 90
14
3.2.1
メソッドの命名 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 92
3.2.2
定数の定義と利用
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 94
3.2.3
列挙型の定義と安全な利用 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 97
3.3
スタイルパターンの活用法 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 100
3.4
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 102
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 103
第 4 章 組織のためのパターン・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 105
4.1
アジャイルなソフトウェア開発の組織パターン
・・・・・・・・・・・・・・・・・・・・・・・・・・・ 107
4.1.1
組織パターンの目的 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 107
4.1.2
組織パターンの歴史 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 108
4.1.3
組織の構造
4.1.4
組織パターンとパターンランゲージ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 110
4.1.5
プロジェクトマネジメントのパターンランゲージ ・・・・・・・・・・・・・・・・・・・・・・・・・ 111
4.1.6
漸進的な組織成長のパターンランゲージ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 114
4.1.7
組織のスタイルのパターンランゲージ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 117
4.1.8
人とコードのパターンランゲージ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 117
4.2
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 108
新しいアイディアを組織に導入するためのパターン ・・・・・・・・・・・・・・・・・・・・・・ 120
4.2.1
あなたの組織は学習していますか?・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 120
4.2.2
組織の学習とパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 120
4.2.3
導入パターンの生い立ち ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 121
4.2.4
パターンの前提 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 121
4.2.5
導入パターンのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 121
4.3
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 128
《参考文献》
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 129
第 5 章 ビジネスモデリングのためのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 131
5.1
Hay のデータモデルパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 132
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 132
5.1.1
データモデルパターンの特性
5.1.2
Hay データモデルパターンの利用 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 140
5.1.3
Hay データモデルパターンの意義 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 145
5.2
5.2.1
Fowler のアナリシスパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 146
アナリシスパターンの特性 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 146
15
5.2.2
Fowler アナリシスパターンの利用例
5.2.3
アナリシスパターンの活用に向けて・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 154
5.3
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 151
Eriksson-Penker のビジネスモデリングパターン
・・・・・・・・・・・・・・・・・・・・・・・・ 158
5.3.1
Eriksson-Penker のビジネスモデリングとは・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 158
5.3.2
Eriksson-Penker のビジネスモデリングパターン
5.3.3
Eriksson-Penker ビジネスモデリングパターンの利用例
5.3.4
ビジネスモデリングパターンとアナリシスパターンの相違について
・・・・・・・・・・・・・・・・・・・・・・・・ 164
・・・・・・・・・・・・・・・・ 174
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 178
ストリームラインオブジェクトモデリングのパターン・・・・・・・・・・・・・・・・・・・・ 180
5.4
5.4.1
ストリームラインオブジェクトモデリングのパターンリストとその特徴
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 180
5.4.2
ストリームラインオブジェクトモデリングのパターン利用例 ・・・・・・・・・・・・ 184
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 184
(1)
アクタ-ロール
(2)
外部の場所-場所 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 186
(3)
品目-特定品目
(4)
組立品-部品 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 187
(5)
コンテナ-コンテンツ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 188
(6)
グループ-メンバ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 189
(7)
トランザクション-ロール
(8)
トランザクション-場所 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 190
(9)
トランザクション-特定品目 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 191
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 186
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 189
(10) コンポジットトランザクション-明細 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 191
(11) 特定品目-明細
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 192
(12) トランザクション-後続トランザクション ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 193
(13) ストリームオブジェクトモデリングのパターンとその他のパターン
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 194
5.5
ビジネスモデリングのためのパターンをプロジェクトに導入する
・・・・・・ 195
5.5.1
パターンの記述形式について再考する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 195
5.5.2
アセットとしてのパターンについて考える ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 198
5.5.3
自分たちの組織のためにパターンカタログ,パターンランゲージを
構築する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 200
16
5.6
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 201
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 202
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 203
第三部
第6章
デザインパターン再考
デザインパターン:
設計の原則とフレームワークの視点から ・・・・・・・・・・・・・・・・・・・・・・・・・・・ 207
設計の原則とデザインパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 208
6.1
6.1.1
開放・閉鎖原則(OCP:Open-Closed Principle) ・・・・・・・・・・・・・・・・・・・・・・・・・・ 212
6.1.2
単一責任の原則(SRP:Single Responsibility Principle) ・・・・・・・・・・・・・・・・ 217
6.1.3
依存関係逆転の原則(DIP:Dependency Inversion Principle) ・・・・・・・・・・ 221
6.1.4
その他の設計の原則 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 225
(1)
Liskov の置換原則(LSP:Liskov Substitution Principle)・・・・・・・・・・・・・・・ 225
(2)
インタフェース分離の原則(ISP:Interface-Segregation Principle) ・・・ 225
デザインパターンとフレームワーク・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 226
6.2
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 227
6.2.1
フレームワークの構造と特徴
6.2.2
ホットスポットとフローズンスポット ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 231
6.2.3
フレームワーク構成原理とデザインパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 233
(1)
テンプレート・フック単一化構成原理
(Template-Hook Unification Construction Principle)・・・・・・・・・・・・・・・・・・・ 234
(2)
テンプレート・フック分離構成原理
(Template-Hook Separation Construction Principle) ・・・・・・・・・・・・・・・・・・・ 236
(3)
再帰的テンプレート・フック組合せ構成原理
(Recursive Template-Hook Combination Construction Principle) ・・・・ 237
6.2.4
フレームワーク開発のヒント
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 239
(1)
フレームワーク開発プロセス
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 239
(2)
主要な抽象クラスの定義 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 240
(3)
クラスファミリ・クラスチーム・サブシステム
(4)
フレームワークのホットスポットの識別 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 243
・・・・・・・・・・・・・・・・・・・・・・・・・・・ 241
17
6.3
この章のまとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 244
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 245
第 7 章 デザインパターン適用支援ツール ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 247
7.1
デザインパターンの適用手順
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 248
(1)
状況理解段階 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 248
(2)
デザインパターン選択段階 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 249
(3)
適用箇所決定段階
(4)
展開段階 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 250
(5)
周囲調整段階 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 251
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 249
デザインパターンの展開作業の UML 表現 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 252
7.2
7.2.1
デザインパターンの UML による記述 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 252
7.2.2
UML パラメタライズド・コラボレーションによる
デザインパターンの展開表現
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 254
ツールによるデザインパターン展開・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 260
7.3
7.3.1
UML ツールによる設計モデルへの展開 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 260
(1)
機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 260
(2)
効果 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 261
(3)
例 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 261
(4)
留意すべき問題と解決 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 262
7.3.2
プログラミング環境による実装コードへの展開
・・・・・・・・・・・・・・・・・・・・・・・・・・・ 266
(1)
機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 266
(2)
効果 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 266
(3)
例 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 266
(4)
留意すべき問題と解決 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 268
7.3.3
ポストオブジェクト指向プログラミング言語による
実装コードへの展開 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 270
18
(1)
機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 270
(2)
効果 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 271
(3)
例 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 272
(4)
留意すべき問題と解決 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 277
7.4
ツールによるデザインパターン検出・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 279
7.4.1
デザインパターン自動検出ツール ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 279
7.4.2
AOP 処理系によるデザインパターン検証 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 281
7.5
ツールの比較と有効性に関する議論・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 282
7.6
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 283
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 284
第四部
パターンの導入
第 8 章 ナレッジマネジメントとパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 289
8.1
パターンを探してみよう ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 291
8.2
パターンを味わってみよう ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 291
8.3
パターンをさらに味わってみよう ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 294
8.4
パターンを書いてみよう ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 297
8.5
パターンを組み合わせてみよう ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 300
8.6
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 301
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 302
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 303
第 9 章 ソフトウェア開発へのパターンの導入 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 305
9.1
「きっかけ」としてのパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 306
9.2
パターンの姿勢 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 307
9.2.1
対立よりも対話 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 308
9.2.2
誰もがいい仕事をしたい ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 311
9.2.3
パターンの境地:無名の質(QWAN) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 312
9.3
パターンを導入する 9 つの理由・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 315
理由 1
パターンはソフトウェア開発組織の文化を反映する ・・・・・・・・・・・・・・・・・・・ 315
理由 2
パターンは熟練者の理解構造を反映している・・・・・・・・・・・・・・・・・・・・・・・・・・・ 316
理由 3
パターンは知識共有を助ける ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 317
理由 4
パターンは良識に基づく行動を促す ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 318
19
9.4
理由 5
パターンはコミュニケーションの質を上げる・・・・・・・・・・・・・・・・・・・・・・・・・・・ 319
理由 6
パターンは合意形成を促進する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 323
理由 7
パターンは対立関係の解消を促す ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 325
理由 8
パターンはドキュメンテーションを助ける ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 333
理由 9
パターンは人材の育成を助ける ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 336
パターンに対する 9 つの誤解 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 338
誤解 1
パターン=デザインパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 338
誤解 2
パターン=部品 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 339
誤解 3
パターンとは,要するに手順書だ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 347
誤解 4
パターン形式を理解すればパターンは使いこなせる ・・・・・・・・・・・・・・・・・・・ 347
誤解 5
パターンランゲージは建築の世界で大成功を収めた ・・・・・・・・・・・・・・・・・・・ 348
誤解 6
建築と同じようにソフトウェアパターンが作られている
誤解 7
筆者は,パターンがそれ単独でソフトウェア開発の問題を解決すると
・・・・・・・・・・・・・ 349
主張している ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 351
9.5
9.6
誤解 8
ツールを使えばパターンは自動適用できる ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 351
誤解 9
パターンは常に正しいことが保証されている・・・・・・・・・・・・・・・・・・・・・・・・・・・ 353
パターンの 7 つの落とし穴 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 356
落とし穴 1
どんなアイディアでもパターンとして書こうとする・・・・・・・・・・・・・ 356
落とし穴 2
パターンがあればとにかく適用しようとする
落とし穴 3
一度書いたパターンを二度と見直さない ・・・・・・・・・・・・・・・・・・・・・・・・・・ 360
落とし穴 4
パターン記述の完璧を目指す ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 361
落とし穴 5
パターン活動が重すぎる ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 362
落とし穴 6
自分だけがパターンを使えばいい
落とし穴 7
パターンよりもパターンの考え方が大事だ ・・・・・・・・・・・・・・・・・・・・・・・ 364
・・・・・・・・・・・・・・・・・・・・ 358
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 363
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 365
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 366
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 369
20
第 10 章
10.1
組織のためのパターン活動プロセス構築ガイド ・・・・・・・・・・・・・・・・ 371
ソフトウェア開発のフレームとパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 371
10.1.1 SLCP-JCF98 とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 371
10.1.2 ソフトウェア開発プロセスとパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 376
10.2
パターンエンジン
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 378
10.2.1 パターンマネジメントユースケース・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 384
10.2.2 ソフトウェアエンジニアリングユースケース ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 390
10.2.3 パターン支援 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 395
10.3
パターン文化の醸成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 399
10.4
まとめ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 401
《参考文献》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 402
《URL》 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 402
付録 A
GoF デザインパターン
―フレームワーク構成原理と拡張性 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 403
付録 B SLCP-JCF98 のプロセスとパターンの関連 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ 407
パターン索引 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 425
索 引 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 430
〔コラム〕
拡張性とソフトウェア開発手法について ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 216
欲求−願望−要求モデルとパターン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 328
21