リファクタリング 既存のコードを安全に改善する(第2版)ソフトウェア開発の名著、第2版登場! リファクタリングは、 本第2版では、 はじめに リファクタリングとは? 本書の内容 本書の対象読者 先人の礎の上に 謝辞 第1章 リファクタリング――最初の例 スタート地点 着手前のコメント リファクタリングの第一歩 statement関数の分割 現況:入れ子になった関数がたくさん 計算とフォーマットにフェーズを分割 現況:二つのファイル(とフェーズ)への分離 型による計算処理の再編成 現況:ポリモーフィックなCalculatorでデータを作成 まとめ 第2章 リファクタリングの原則 リファクタリングの定義 二つの帽子 リファクタリングを行う理由 いつリファクタリングをすべきか リファクタリングの問題点 リファクタリングとアーキテクチャ、そしてYagni リファクタリングとソフトウェア開発プロセス リファクタリングとパフォーマンス リファクタリングの起源 自動化されたリファクタリング さらに興味のある方へ 第3章 コードの不吉な臭い 不可思議な名前 重複したコード 長い関数 長いパラメータリスト グローバルなデータ 変更可能なデータ 変更の偏り 変更の分散 特性の横恋慕 データの群れ 基本データ型への執着 重複したスイッチ文 ループ 怠け者の要素 疑わしき一般化 一時的属性 メッセージの連鎖 仲介人 インサイダー取引 巨大なクラス クラスのインタフェース不一致 データクラス 相続拒否 コメント 第4章 テストの構築 自己テストコードの意義 テストのためのサンプルコード 最初のテスト テストの追加 フィクスチャの変更 境界値の検査 これより先には 第5章 カタログの紹介 リファクタリングのフォーマット リファクタリングの選択 第6章 リファクタリングはじめの一歩 関数の抽出 関数のインライン化 変数の抽出 変数のインライン化 関数宣言の変更 変数のカプセル化 変数名の変更 パラメータオブジェクトの導入 関数群のクラスへの集約 関数群の変換への集約 フェーズの分離 第7章 カプセル化 レコードのカプセル化 コレクションのカプセル化 オブジェクトによるプリミティブの置き換え 問い合わせによる一時変数の置き換え クラスの抽出 クラスのインライン化 委譲の隠蔽 仲介人の除去 アルゴリズムの置き換え 第8章 特性の移動 関数の移動 フィールドの移動 ステートメントの関数内への移動 ステートメントの呼び出し側への移動 関数呼び出しによるインラインコードの置き換え ステートメントのスライド ループの分離 パイプラインによるループの置き換え デッドコードの削除 第9章 データの再編成 変数の分離 フィールド名の変更 問い合わせによる導出変数の置き換え 参照から値への変更 値から参照への変更 第10章 条件記述の単純化 条件記述の分解 条件記述の統合 ガード節による入れ子の条件記述の置き換え ポリモーフィズムによる条件記述の置き換え 特殊ケースの導入 アサーションの導入 第11章 APIのリファクタリング 問い合わせと更新の分離 パラメータによる関数の統合 フラグパラメータの削除 オブジェクトそのものの受け渡し 問い合わせによるパラメータの置き換え パラメータによる問い合わせの置き換え setterの削除 ファクトリ関数によるコンストラクタの置き換え コマンドによる関数の置き換え 関数によるコマンドの置き換え 第12章 継承の取り扱い メソッドの引き上げ フィールドの引き上げ コンストラクタ本体の引き上げ メソッドの押し下げ フィールドの押し下げ サブクラスによるタイプコードの置き換え サブクラスの削除 スーパークラスの抽出 クラス階層の平坦化 委譲によるサブクラスの置き換え 委譲によるスーパークラスの置き換え 文献リスト 訳者あとがき 索引 著者および寄稿者紹介(原稿執筆当時) 訳者紹介 奥付 リファクタリングリスト 不吉な臭いと、対処する一般的リファクタリング |
レビュー - レビューを書く
目次
1 | |
4 | |
5 | |
6 | |
22 | |
24 | |
二つのファイルとフェーズへの分離 | 31 |
型による計算処理の再編成 | 34 |
問い合わせによる一時変数の置き換え | 185 |
クラスの抽出 | 189 |
クラスのインライン化 | 193 |
委譲の隠蔽 | 196 |
仲介人の除去 | 199 |
アルゴリズムの置き換え | 202 |
第8章特性の移動 | 205 |
関数の移動 | 206 |
ポリモーフィックなCalculatorでデータを作成 | 41 |
まとめ | 43 |
第2章リファクタリングの原則 | 45 |
二つの帽子 | 46 |
リファクタリングを行う理由 | 47 |
いつリファクタリングをすべきか | 50 |
リファクタリングの問題点 | 56 |
リファクタリングとアーキテクチャそしてYagni | 63 |
リファクタリングとソフトウェア開発プロセス | 64 |
リファクタリングとパフォーマンス | 65 |
リファクタリングの起源 | 68 |
自動化されたリファクタリング | 70 |
さらに興味のある方へ | 71 |
第3章コードの不吉な臭い | 73 |
不可思議な名前 | 74 |
長い関数 | 75 |
長いパラメータリスト | 76 |
変更可能なデータ | 77 |
変更の偏り | 78 |
変更の分散 | 79 |
データの群れ | 80 |
重複したスイッチ文 | 81 |
ループ | 82 |
一時的属性 | 83 |
仲介人 | 84 |
クラスのインタフェース不一致 | 85 |
相続拒否 | 86 |
第4章テストの構築 | 89 |
テストのためのサンプルコード | 91 |
最初のテスト | 95 |
テストの追加 | 97 |
フィクスチャの変更 | 100 |
境界値の検査 | 101 |
これより先には | 104 |
第5章カタログの紹介 | 107 |
リファクタリングの選択 | 108 |
第6章リファクタリングはじめの一歩 | 111 |
関数の抽出 | 112 |
関数のインライン化 | 121 |
変数の抽出 | 125 |
変数のインライン化 | 129 |
関数宣言の変更 | 130 |
変数のカプセル化 | 138 |
変数名の変更 | 143 |
パラメータオブジェクトの導入 | 146 |
関数群のクラスへの集約 | 150 |
関数群の変換への集約 | 155 |
フェーズの分離 | 160 |
第7章カプセル化 | 167 |
レコードのカプセル化 | 168 |
コレクションのカプセル化 | 176 |
オブジェクトによるプリミティブの置き換え | 181 |
フィールドの移動 | 215 |
ステートメントの関数内への移動 | 221 |
ステートメントの呼び出し側への移動 | 225 |
関数呼び出しによるインラインコードの置き換え | 230 |
ステートメントのスライド | 231 |
ループの分離 | 236 |
パイプラインによるループの置き換え | 240 |
デッドコードの削除 | 246 |
第9章データの再編成 | 247 |
変数の分離 | 248 |
フィールド名の変更 | 252 |
問い合わせによる導出変数の置き換え | 256 |
参照から値への変更 | 260 |
値から参照への変更 | 264 |
第10章条件記述の単純化 | 267 |
条件記述の分解 | 268 |
条件記述の統合 | 271 |
ガード節による入れ子の条件記述の置き換え | 274 |
ポリモーフィズムによる条件記述の置き換え | 279 |
特殊ケースの導入 | 296 |
アサーションの導入 | 309 |
第11章 APIのリファクタリング | 313 |
問い合わせと更新の分離 | 314 |
パラメータによる関数の統合 | 318 |
フラグパラメータの削除 | 322 |
オブジェクトそのものの受け渡し | 327 |
問い合わせによるパラメータの置き換え | 332 |
パラメータによる問い合わせの置き換え | 335 |
setterの削除 | 339 |
ファクトリ関数によるコンストラクタの置き換え | 342 |
コマンドによる関数の置き換え | 345 |
関数によるコマンドの置き換え | 352 |
第12章継承の取り扱い | 357 |
メソッドの引き上げ | 358 |
フィールドの引き上げ | 361 |
コンストラクタ本体の引き上げ | 363 |
メソッドの押し下げ | 367 |
フィールドの押し下げ | 368 |
サブクラスによるタイプコードの置き換え | 369 |
サブクラスの削除 | 376 |
スーパークラスの抽出 | 382 |
クラス階層の平坦化 | 387 |
委譲によるサブクラスの置き換え | 388 |
委譲によるスーパークラスの置き換え | 407 |
文献リスト | 413 |
訳者あとがき | 419 |
421 | |
著者および寄稿者紹介原稿執筆当時 | 433 |
訳者紹介 | 434 |
奥付 | 435 |
リファクタリングリスト | 436 |
不吉な臭いと対処する一般的リファクタリング | 438 |