magazine.gif 新装版 リファクタリング―既存のコードを安全に改善する―

日本語版の再出版にあたって

  • 謝辞

本書に寄せて
はじめに

  • リファクタリングとは
  • 本書の内容
  • 本書の対象となる読者
  • 先人の礎の上に
  • 謝辞

第1章 リファクタリング最初の例

  • スタート地点
  • リファクタリングの第一歩
  • statement メソッドの分割、再配置
  • 料金計算の条件文をポリモーフィズムに置き換える
  • まとめ

第2章 リファクタリングの原則

  • リファクタリングの定義
  • リファクタリングを行う理由
  • いつリファクタリングをすべきか
  • 管理者を説得するには
  • リファクタリングの問題点
  • リファクタリングと設計
  • リファクタリングとパフォーマンス
  • リファクタリングの起源

第3章 コードの不吉な臭い

  • 重複したコード
  • 長すぎるメソッド
  • 巨大なクラス
  • 長すぎるパラメータリスト
  • 変更の偏り
  • 変更の分散
  • 特性の横恋慕
  • データの群れ
  • 基本データ型への執着
  • スイッチ文
  • パラレル継承
  • 怠け者クラス
  • 疑わしき一般化
  • 一時的属性
  • メッセージの連鎖
  • 仲介人
  • 不適切な関係
  • クラスのインタフェース不一致
  • 未熟なクラスライブラリ
  • データクラス
  • 相続拒否
  • コメント

第4章 テストの構築

  • 自己テストコードの意義
  • JUnit テストフレームワーク
  • テストの追加

第5章 リファクタリング・カタログに向けて

  • リファクタリングの形式
  • 参照の検索
  • 本書のリファクタリングの成熟度

第6章 メソッドの構成

  • メソッドの抽出
  • メソッドのインライン化
  • 一時変数のインライン化
  • 問い合せによる一時変数の置き換え
  • 説明用変数の導入
  • 一時変数の分離
  • パラメータへの代入の除去
  • メソッドオブジェクトによるメソッドの置き換え
  • アルゴリズムの取り替え

第7章 オブジェクト間での特性の移動

  • メソッドの移動
  • フィールドの移動
  • クラスの抽出
  • クラスのインライン化
  • 委譲の隠蔽
  • 仲介人の除去
  • 外部メソッドの導入
  • 局所的拡張の導入

第8章 データの再編成

  • 自己カプセル化フィールド
  • オブジェクトによるデータ値の置き換え
  • 値から参照への変更
  • 参照から値への変更
  • オブジェクトによる配列の置き換え
  • 観察されるデータの複製
  • 単方向関連の双方向への変更
  • 双方向関連の単方向への変更
  • シンボリック定数によるマジックナンバーの置き換え
  • フィールドのカプセル化
  • コレクションのカプセル化
  • データクラスによるレコードの置き換え
  • クラスによるタイプコードの置き換え
  • サブクラスによるタイプコードの置き換え
  • State/Strategy によるタイプコードの置き換え
  • フィールドによるサブクラスの置き換え

第9章 条件記述の単純化

  • 条件記述の分解
  • 条件記述の統合
  • 重複した条件記述の断片の統合
  • 制御フラグの削除
  • ガード節による入れ子条件記述の置き換え
  • ポリモーフィズムによる条件記述の置き換え
  • ヌルオブジェクトの導入
  • 表明の導入

第10章 メソッド呼び出しの単純化

  • メソッド名の変更
  • パラメータの追加
  • パラメータの削除
  • 問い合せと更新の分離
  • メソッドのパラメタライズ
  • 明示的なメソッド群によるパラメータの置き換え
  • オブジェクトそのものの受け渡し
  • メソッドによるパラメータの置き換え
  • パラメータオブジェクトの導入
  • set メソッドの削除
  • メソッドの隠蔽
  • Factory Method によるコンストラクタの置き換え
  • ダウンキャストのカプセル化
  • 例外によるエラーコードの置き換え
  • 条件判定による例外の置き換え

第11章 継承の取り扱い

  • フィールドの引き上げ
  • メソッドの引き上げ
  • コンストラクタ本体の引き上げ
  • メソッドの引き下げ
  • フィールドの引き下げ
  • サブクラスの抽出
  • スーパークラスの抽出
  • インタフェースの抽出
  • 階層の平坦化
  • Template Method の形成
  • 委譲による継承の置き換え
  • 継承による委譲の置き換え

第12章 大きなリファクタリング

  • 継承の切り離し
  • 手続き的な設計からオブジェクト指向への変換
  • プレゼンテーションとドメインの分離
  • 階層の抽出

第13章 リファクタリング、再利用、現実

  • 現実の壁
  • 開発者が自分たちのプログラムをリファクタリングしようと思わない理由
  • 現実の壁(再び)
  • リファクタリングのリソースと参考文献
  • ソフトウェア再利用および技術移転に与える影響
  • 最後に
  • 参考文献

第14章 リファクタリングツール

  • ツールを用いたリファクタリング
  • リファクタリングツールの技術的規範
  • リファクタリングツールの実践的規範
  • まとめ

第15章 部品から全体へ

付録 Java のバージョンアップに伴うリファクタリングをめぐる環境の変化

  • Java の進歩
  • テスティングフレームワークの進歩
  • Java 7 で本書コードを再びリファクタリングする

参考文献
リファクタリングのヒント
訳者あとがき
索引