Comments
Description
Transcript
目 次
目 次 序章に代えて ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・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