マルチパラダイムデザイン(James O. Coplien)
書籍情報
- 著者:James O. Coplien(著), 金沢典子(訳), 平鍋健児(訳), 羽生田栄一(訳)
- 発行日:2001-12-15
- ISBN:9784894712980
書籍目次
- 序文
- 謝辞
- 日本語版に寄せて
- 第1章 序論:マルチパラダイムが必要とされる背景
- 1.1 ソフトウェア開発の課題
- 1.2 ドメインエンジニアリングとマルチパラダイム
- 1.3 設計, 分析, ドメイン, ファミリ:用語定義
- 1.3.1 分析
- 1.3.2 設計
- 1.3.3 アーキテクチャ
- 1.3.4 ドメイン
- 1.3.5 ファミリと共通性分析
- 1.3.6 抽象の次元
- 1.3.7 正確な抽象
- 1.3.8 実装とエンジニアリング
- 1.4 オブジェクトを超えて
- 1.5 共通性/可変性分析
- 1.6 ソフトウェアファミリ
- 1.7 マルチパラダイムデザイン
- 1.7.1 プログラミング言語:C++
- 1.7.2 複雑なファミリの取り扱い
- 1.7.3 パターンとマルチパラダイムデザイン
- 1.8 マルチパラダイム開発とプログラミング言語
- 1.8.1 FASTにおけるアプリケーション指向言語
- 1.8.2 ドメイン分析とプログラミング言語C++
- 1.8.3 ポリモーフィズム
- 1.9 共通性分析:別視点から考える
- 1.9.1 ポリシーとメカニズム
- 1.9.2 時間軸の可変性と空間軸の可変性
- 1.9.3 哲学的考察
- 1.10 本書と関連する研究と実践
- 1.10.1 簡単な歴史
- 1.10.2 メタオブジェクトプロトコル
- 1,10.3 アスペクト指向プログラミング
- 1.10.4 生成的プログラミング
- 1.11 要約
- 第2章 共通性分析
- 2.1 共通性:抽象のエッセンス
- 2.1.1 演繹的共通性と帰納的共通性
- 2.1.2 ソフトウェアファミリ
- 2.2 分析を始めるにあたって:ドメインの語彙を定義する
- 2.2.1 ドメイン辞書
- 2.2.2 設計の認識論
- 2.3 共通性次元と共通性カテゴリ
- 2.3.1 データ構造
- 2.3.2 名前と振る舞い
- 2.3.3 アルゴリズム
- 2.4 共通性の例
- 2.4.1 構造
- 2.4.2 名前と振る舞い
- 2.4.3 アルゴリズム
- 2.5 共通性分析のレビュー
- 2.6 共通性とシステム拡張
- 2.7 要約
- 第3章 可変性分析
- 3.1 可変性:生の芳香
- 3.2 共通性ベース
- 3.3 正の可変性と負の可変性
- 3.4 ドメインと可変性レンジ
- 3.4.1 例:Text Editing Buffers
- 3.4.2 可変パラメータの適切さ
- 3.5 バインディング時期
- 3.5.1 バインディング時期と柔軟性
- 3.5.2 オブジェクトはバインディングを遅延させるか
- 3.5.3 効率とバインディング時期
- 3.5.4 バインディング時期の候補
- 3.5.5 例
- 3.6 デフォルト
- 3.7 可変性テーブル
- 3.8 可変性の落とし穴
- 3.9 可変性分析のレビュー
- 3.10 可変性依存図
- 3.11 要約
- 第4章 アプリケーションドメイン分析
- 4.1 分析, ドメイン分析, それらを超えて
- 4.1.1 これまでの分析の定義
- 4.1.2 システムファミリ:ドメイン分析
- 4.1.3 アプリケーションドメイン分析とソリューションドメイン分析
- 4.1.4 ドメイン分析のアクティビティ
- 4.2 ドメイン分析を実施するサブドメイン
- 4.2.1 ドメイン分析と再利用
- 4.2.2 サブドメインのモジュール性
- 4.2.3 繰り返しと階層
- 4.3 サブドメインの構造
- 4.3.1 サブドメインの実装フレームワーク
- 4.3.2 サブドメイン分析のアクティビティ
- 4.4 分析:俯瞰図
- 4.5 要約
- 第5章 オブジェクト指向分析
- 5.1 パラダイムとオブジェクト
- 5.1.1 クラスとオブジェクト
- 5.1.2 Liskov置換原則
- 5.1.3 仮想関数
- 5.1.4 オブジェクト指向:もう1つの定義
- 5.1.5 オブジェクト指向設計の適合性
- 5.2 オブジェクト指向共通性分析
- 5.3 要約
- 第6章 ソリューションドメイン分析
- 6.1 “反対側”のドメイン
- 6.2 C++ソリューションドメイン:概要
- 6.3 データ
- 6.4 多重定義
- 6.5 クラステンプレート
- 6.6 関数テンプレート
- 6.7 継承
- 6.8 仮想関数
- 6.9 共通性分析とポリモーフィズム
- 6.10 プリプロセッサディレクティブ
- 6.11 負の可変性
- 6.11.1 負の可変性を活用するケース
- 6.11.2 負の可変性とドメイン分割
- 6.11.3 負の可変性のまとめ
- 6.12 ソリューションドメインの拡張要素
- 6.12.1 多重継承
- 6.12.2 デザインパターン
- 6.13 C++ソリューションドメインの総括:ファミリテーブル
- 6.14 パラダイムの相対的な力関係
- 第7章 マルチパラダイム
- 7.1 マルチパラダイムデザインの概要
- 7.1.1 1つのサイズですべてをまかなうことはできない
- 7.1.2 複雑さの度合い
- 7.2 マルチパラダイムデザインのアクティビティ
- 7.3 例:単純なランゲージトランスレータ
- 7.3.1 サブドメイン分割
- 7.3.2 サブドメインに適用できる正しいパラダイムの見つけ方
- 7.3.3 設計の実装
- 7.4 分析ではなく,設計を
- 7.4.1 分析なのか, アーキテクチャなのか, それとも設計なのか?
- 7.5 例:自動微分
- 7.5.1 基本演算ドメイン
- 7.5.2 次数ドメイン
- 7.5.3 値ドメイン
- 7.5.4 設計の拡張
- 7.6 アウトボードパラダイム
- 7.7 マネジメント
- 7.7.1 オッカムの剃刀:単純性を維持する
- 7.7.2 分割統治
- 7.7.3 C++を超えて
- 7.7.4 ドメイン知
- 7.7.5 システムエンジニアリングと開発プロセス
- 7.8 要約
- 第8章 1つのドメインに混在するマルチパラダイム
- 8.1 手法と設計
- 8.2 共通性分析:共通性の設計次元軸とは何か
- 8.3 1組の共通性セットにおける可変性の複数次元軸
- 8.3.1 可変性分析
- 8.3.2 共通性と可変性をC++で表現する
- 8.4 要約
- 第9章 共依存ドメイン
- 9.1 共依存ドメイン
- 9.11 ドメイン分析をマルチドメイン分析に汎化する
- 9.1.2 例:Text Buffer
- 9.1.3 1番目のケース:コンパイル時バインディング
- 9.1.4 2番目のケース:Buffer型がOutput Medium型に実行時に依存する, Output Medium型がBuffer型にコンパイル時に依存する
- 9.1.4 3番目のケース:Buffer型がOutput Medium型に実行時に依存する, Output Medium型がBuffer型に実行時に依存する
- 9.2 設計と構造
- 9.3 例:状態遷移マシン
- 9.4 パターンベースの解決策戦略
- 9.5 要約
- 第10章 結論
- 10.1 概括
- 10.1.1 抽象と意図
- 10.1.2 メタデザイン
- 10.1.3 ドメインとパラダイムの関係
- 10.1.4 1個のドメインにおけるマルチパラダイム
- 10.1.5 ドメイン間の依存性
- 10.1.6 負の可変性理論
- 10.1.7 デザインパターンの正規化
- 10.2 さまざまなパラダイム
- 10.3 スケーラビリティ
- 10.4 今後の展開
- 10.4.1 抽象の分類
- 10.4.2 パラダイムの分類
- 参考文献
- 訳者あとがき
- 索引