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

前表紙
株式会社 オーム社, 2014/07/26 - 488 ページ

※本書は旧版です。改訂版が販売中です。

 →「リファクタリング 既存のコードを安全に改善する(第2版)」


レガシーコードを一刀両断! 蘇るあの名著

プログラムに潜む扱いにくい部分を見つけ出し、その動作を変えずに内部の構造を改善していくためのテクニックを整理したマーティン・ファウラー氏によるソフトウェア開発の名著『リファクタリング プログラミングの体質改善テクニック』("Refactoring:Improving the Design of Existing Code")が、オリジナルの訳者による丁寧な見直しと現代的なJava開発環境による「再リファクタリング」を施した書き下ろし付録を収録して再発行!

旧版の価値を知るベテランはもちろん、これからソフトウェア開発に携わる新人にも必読の一冊です。


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

謝辞

本書に寄せて

はじめに

リファクタリングとは

本書の内容

本書の対象となる読者

先人の礎の上に

謝辞

第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 で本書コードを再びリファクタリングする

参考文献

リファクタリングのヒント

訳者あとがき

索引

 

目次

第1章リファクタリングー最初の例
1
リファクタリングの第一歩
7
statementメソッドの分割再配置
8
料金計算の条件文をポリモーフィズムに置き換える
34
まとめ
52
第2章リファクタリングの原則
53
リファクタリングを行う理由
55
いつリファクタリングをすべきか
57
第9章条件記述の単純化
237
条件記述の分解
238
条件記述の統合
240
重複した条件記述の断片の統合
243
制御フラグの削除
245
ガード節による入れ子条件記述の置き換え
250
ポリモーフィズムによる条件記述の置き換え
255
ヌルオブジェクトの導入
260

管理者を説得するには
60
リファクタリングの問題点
62
リファクタリングと設計
66
リファクタリングとパフォーマンス
69
リファクタリングの起源
70
第3章コードの不吉な臭い
75
重複したコード
76
巨大なクラス
78
変更の偏り
79
変更の分散
80
データの群れ
81
スイッチ文
82
パラレル継承
83
一時的属性
84
仲介人
85
未熟なクラスライブラリ
86
相続拒否
87
第4章テストの構築
89
JUnitテストフレームワーク
91
テストの追加
97
第5章リファクタリングカタログに向けて
103
参照の検索
105
本書のリファクタリングの成熟度
106
第6章メソッドの構成
109
メソッドの抽出
110
メソッドのインライン化
117
一時変数のインライン化
119
問い合せによる一時変数の置き換え
120
説明用変数の導入
124
一時変数の分離
128
パラメータへの代入の除去
131
メソッドオブジェクトによるメソッドの置き換え
135
アルゴリズムの取り替え
139
第7章オブジェクト間での特性の移動
141
メソッドの移動
142
フィールドの移動
146
クラスの抽出
149
クラスのインライン化
154
委譲の隠蔽
157
仲介人の除去
160
外部メソッドの導入
162
局所的拡張の導入
164
第8章データの再編成
169
自己カプセル化フィールド
171
オブジェクトによるデータ値の置き換え
175
値から参照への変更
179
参照から値への変更
183
オブジェクトによる配列の置き換え
186
観察されるデータの複製
189
単方向関連の双方向への変更
197
双方向関連の単方向への変更
200
シンボリック定数によるマジックナンバーの置き換え
204
フィールドのカプセル化
206
コレクションのカプセル化
208
データクラスによるレコードの置き換え
217
クラスによるタイプコードの置き換え
218
サブクラスによるタイプコードの置き換え
223
StateStrategyによるタイプコードの置き換え
227
フィールドによるサブクラスの置き換え
232
表明の導入
267
第10章メソッド呼び出しの単純化
271
メソッド名の変更
273
パラメータの追加
275
パラメータの削除
277
問い合せと更新の分離
279
メソッドのパラメタライズ
283
明示的なメソッド群によるパラメータの置き換え
285
オブジェクトそのものの受け渡し
288
メソッドによるパラメータの置き換え
292
パラメータオブジェクトの導入
295
setメソッドの削除
300
メソッドの隠蔽
303
Factory Methodによるコンストラクタの置き換え
304
ダウンキャストのカプセル化
308
例外によるエラーコードの置き換え
310
条件判定による例外の置き換え
315
第11章継承の取り扱い
319
フィールドの引き上げ
320
メソッドの引き上げ
322
コンストラクタ本体の引き上げ
325
メソッドの引き下げ
328
フィールドの引き下げ
329
サブクラスの抽出
330
スーパークラスの抽出
336
インタフェースの抽出
341
階層の平坦化
344
Template Methodの形成
345
委譲による継承の置き換え
352
継承による委譲の置き換え
355
第12章大きなリファクタリング
359
継承の切り離し
362
手続き的な設計からオブジェクト指向への変換
368
プレゼンテーションとドメインの分離
370
階層の抽出
375
第13章リファクタリング再利用現実
379
現実の壁
380
開発者が自分たちのプログラムをリファクタリングしようと思わない理由
381
現実の壁再び
394
リファクタリングのリソースと参考文献
395
ソフトウェア再利用および技術移転に与える影響
396
最後に
398
第14章リファクタリングツール
401
リファクタリングツールの技術的規範
403
リファクタリングツールの実践的規範
405
まとめ
407
第15章部品から全体へ
409
付録 Javaのバージョンアップに伴うリファクタリングをめぐる環境の変化
413
Javaの進歩
414
テスティングフレームワークの進歩
424
Java7で本書コードを再びリファクタリングする
429
参考文献
445
リファクタリングのヒント
449
訳者あとがき
451
索引
453
著者および寄稿者紹介
463
訳者紹介
464
奥付
465
著作権

他の版 - すべて表示

書誌情報