contents memorandum はてな

目次とメモを置いとく場

『オブジェクト指向の考え方――概念から学べる開発のエッセンス 5th Edition』(Matt Weisfeld[著] 神林靖[訳] インプレス 2020//2019)

原題:Object-Oriented Thought Process, 5th Edition.
著者:Matt A. Weisfeld  ソフトウェア開発、システム管理。
訳者:神林 靖[かんばやし・やすし] (1958-) 計算理論、分散システム。
出版社:インプレス
シリーズ:impress top gear
NDC:007.61 情報科学 >> データ処理.情報処理 >> システム分析.システム設計
件名:オブジェクト指向プログラミング


オブジェクト指向の考え方 5th Edition - インプレスブックス


【目次】
まえがき [iii-vii]
  本書の範囲
  第5版で新しくなったこと
  対象読者
  本書のアプローチ
  本書で使用するソースコード
訳者まえがき(2020年5月 神林靖) [viii-ix]
著訳者紹介 [ix]
目次 [x-xv]


Chapter 1 オブジェクト指向概念への招待 001
1.1 基本概念 002
1.2 オブジェクトとレガシーシステム 003
1.3 手続き型プログラミングとオブジェクト指向プログラミング 005
1.4 手続き型開発からオブジェクト指向開発への移行 009
  1.4.1 手続き型プログラミング
  1.4.2 オブジェクト指向プログラミング
1.5 オブジェクトとは何か 011
  1.5.1 オブジェクトのデータ
  1.5.2 オブジェクトの振舞い
1.6 クラスとは何か 017
  1.6.1 オブジェクトの生成
  1.6.2 属性
  1.6.3 メソッド
  1.6.4 メッセージ
1.7 視覚化ツールとしてクラス図を使用する 021
1.8 カプセル化とデータ隠蔽 022
  1.8.1 インタフェース
  1.8.2 実装
  1.8.3 インタフェース / 実装パラダイムの実世界の例
  1.8.4 インタフェース / 実装パラダイムのモデル
1.9 継承 026
  1.9.1 スーパークラスとサブクラス
  1.9.2 抽象化
  1.9.3 is-a 関係
1.10 ポリモーフィズム 031
1.11 コンポジション 035
  1.11.1 抽象化
  1.11.2 has a 関係
1.12 まとめ 036


Chapter 2 オブジェクトを用いて考える 039
2.1 インタフェースと実装の相違を理解する 041
  2.1.1 インタフェース
  2.1.2 実装
  2.1.3 インタフェースと実装の例
2.2 抽象的な考え方を使ってインタフェースを設計する 049
2.3 真に最小限のユーザーインタフェースを提供する 051
  2.3.1 ユーザーを決定する
  2.3.2 オブジェクトの振舞い
  2.3.3 環境による制約
  2.3.4 パブリックインタフェースを特定する
  2.3.5 実装を特定する
2.4 まとめ 055
参考文献 056


Chapter 3 オブジェクト指向概念の詳細 057
3.1 コンストラクタ 058
  3.1.1 コンストラクタはいつ呼び出されるか
  3.1.2 コンストラクタには何があるのか
  3.1.3 デフォルトコンストラク
  3.1.4 複数のコンストラクタを使用する
    メソッドオーバーロード
    UMLを使ってクラスをモデル化する
    スーパークラスはどのように構成されるか
  3.1.5 コンストラクタの設計
3.2 エラー処理 067
  3.2.1 問題を無視する
  3.2.2 問題を検出してアプリケーションを終了する
  3.2.3 問題を検査して回復を試みる
  3.2.4 例外をスローする
3.3 スコープの重要性 071
  3.3.1 局所属性
  3.3.2 オブジェクト属性
  3.3.3 クラス属性
3.4 演算子オーバーロード 078
3.5 多重継承 079
3.6 オブジェクトの操作 080
3.7 まとめ082
参考文献 083


Chapter 4 クラス解剖 085
4.1 クラスの名前 086
4.2 コメント 088
4.3 属性 089
4.4 参照を渡す 091
4.5 コンストラクタ 091
4.6 アクセスメソッド 094
4.7 パブリックインタフェースメソッド 097
4.8 プライベート実装メソッド 098
4.9 まとめ 099
参考文献 099


Chapter 5 クラス設計のガイドライン 101
5.1 実世界システムをモデル化する 102
5.2 パブリックインタフェースを特定する 104
  5.2.1 最小限のパブリックインタフェース
  5.2.2 実装を隠蔽する
5.3 頑健なコンストラクタを(デストラクタも)設計する 107
5.4 クラス中にエラー処理を設計する 108
  5.4.1 クラスのドキュメント化とコメントの使用
  5.4.2 協調を意図したオブジェクトを構成する
5.5 再利用を意識して設計する 109
5.6 拡張を意識して設計する 110
  5.6.1 記述的な名前をつける
  5.6.2 移植不能なコードをカプセル化する
  5.6.3 オブジェクトのコピーと比較の方法を提供する
  5.6.4 スコープをできるだけ小さく保つ
5.7 保持性を意識して設計する 114
  5.7.1 開発プロセスを繰り返す
  5.7.2 インタフェースをテストする
5.8 永続オブジェクトを使用する 118
  5.8.1 オブジェクトの直列化とマーシャリング
5.9 まとめ 120
参考文献 120


Chapter 6 オブジェクトを用いて設計する 123
6.1 設計ガイドライン 124
  6.1.1 適切な分析を施す
  6.1.2 作業範囲記述書を作成する
  6.1.3 要求事項を収集する
  6.1.4 システムプロトタイプを開発する
  6.1.5 クラスを特定する
  6.1.6 各クラスの役割を決定する
  6.1.7 クラスの相互作用を決定する
  6.1.8 システムを記述するクラスモデルを生成する
  6.1.9 コードを使ってユーザーインタフェースのプロトタイプを生成する
6.2 オブジェクトラッパー 131
  6.2.1 構造型のコード
  6.2.2 構造型のコードをラッピングする
  6.2.3 移植不能なコードをラッピングする
  6.2.4 既存のクラスをラッピングする
6.3 まとめ 139
参考文献 139


Chapter 7 継承とコンポジションをマスターする 141
7.1 オブジェクトを再利用する 142
7.2 継承 143
  7.2.1 汎化と特化
  7.2.2 設計上の決定
7.3 コンポジション 150
  7.3.1 UMLコンポジションを表す
7.4 なぜカプセル化オブジェクト指向の基本なのか 154
  7.4.1 継承はどのようにカプセル化を損なうか
  7.4.2 ポリモーフィズムの詳細な例
  7.4.3 オブジェクトの役割
  7.4.4 抽象クラス、 仮想メソッド、プロトコル
7.5 まとめ 165
参考文献 166


Chapter 8 フレームワークと再利用:インタフェースと抽象クラスを使って設計する 167
8.1 コード:再利用すべきかすべきでないか 168
8.2 フレームワークとは何か 169
8.3 契約とは何か 171
  8.3.1 抽象クラス
  8.3.2 インタフェース
  8.3.3 すべてを統合する
  8.3.4 コンパイラによる検証
  8.3.5 契約を締結する
  8.3.6 システムプラグインポイント
8.4 eビジネスの例 187
  8.4.1 eビジネスの課題
  8.4.2 再利用しないアプローチ
  8.4.3 eビジネスソリューション
  8.4.4 UML オブジェクトモデル
8.5 まとめ 197
参考文献 197


Chapter 9 オブジェクトの構築とオブジェクト指向設計 199
9.1 コンポジション関係 201
9.2 段階的に構築する 203
9.3 コンポジションの型 205
  9.3.1 集約
  9.3.2 関連
  9.3.3 関連と集約を併用する
9.4 依存関係を避ける 208
9.5 多重度[cardinality] 210
  9.5.1 複数オブジェクト関連
  9.5.2 オプションとしての関連
9.6 総まとめの例 214
9.7 まとめ 215
参考文献 216


Chapter 10 デザインパターン 217
10.1 なぜデザインパターンなのか 219
10.2 Smalltalk のモデル/ビュー/コントローラ 220
10.3 デザインパターンの型 222
  10.3.1 生成に関するパターン
    ファクトリメソッドデザインパターン
    ファクトリメソッドパターン
  10.3.2 構造に関するパターン
    アダプタ
  10.3.3 振舞いに関するパターン
    イテレータ
    
    
10.4 アンチパターン 234
10.5 まとめ 235
参考文献 235


Chapter 11 依存関係と強く結合したクラスの回避 237
11.1 コンポジションと継承、そして依存関係の注入 240
  11.1.1 1) 継承
  11.1.2 2) コンポジション
  11.1.3 依存関係の注入
11.2 まとめ 251
参考文献 251


Chapter 12 オブジェクト指向設計のSOLIDの原則 253
12.1 オブジェクト指向設計のSOLID の原則 255
  1) 単一役割の原則 (Single Responsibility Principle、SRP)
  2) オープン/クローズの原則 (Open/Close Principle、OCP)
  3) リスコフ置換の原則 (Liskov Substitution Principle、LSP)
  4) インタフェース分割の原則 (Interface Segregation Principle、IPS)
  5) 依存関係の逆転の原則 (Dependency Inversion Principle、DIP)
12.2 まとめ 277
参考文献 278


索引 [280-286]




【抜き書き】


・p. iv

プログラマ採用のインタビューで頻繁に目にすることなのだが、C++プログラマだと主張する開発者が、単に C++ コンパイラを使っているだけのCプログラマであることはよくある。C#.NET、VB.NETObjective-C、Swift、Java といった言語が普及している今日でも、ジョブインタビューで若干の質問をするだけで、 オブジェクト指向についての理解が欠けていることがわかってしまうことも珍しくない。
 〔……〕より悲劇(喜劇)的なことに、中途半端にオブジェクト指向の機能を使用することで、オブジェクト指向プログラマにも理解できないし、非オブジェクト指向プログラマにも理解できないような困ったプログラムを作成するプログラマもいる。
 したがってオブジェクト指向開発環境の使用法を学ぶことも重要であるが、最初に行うべきことは、基本的なオブジェクト指向概念の修得である。読者におかれては、プログラミング言語の使用に飛びつきたいという情動を抑えて、オブジェクト指向の思考プロセスを学ぶことに時間を費やすことをお勧めしたい。