著者:結城 浩[ゆうき・ひろし](1963-) プログラマー。技術書ライター。
装丁:米谷テツヤ[よねたに・てつや] グラフィックデザイナー。
NDC:007.64 情報科学 >> データ処理.情報処理 >> プログラミング
Java言語で学ぶリファクタリング入門 | SBクリエイティブ
『Java言語で学ぶリファクタリング入門』
【簡易目次】
第0章 リファクタリングとは
第1章《シンボリック定数によるマジックナンバーの置き換え》
第2章《制御フラグの削除》
第3章《アサーションの導入(表明の導入)》
第4章《ヌルオブジェクトの導入》
第5章《メソッドの抽出》
第6章《クラスの抽出》
第7章《クラスによるタイプコードの置き換え》
第8章《サブクラスによるタイプコードの置き換え》
第9章《State/Strategyによるタイプコードの置き換え》
第10章《例外によるエラーコードの置き換え》
第11章《Factory Methodによるコンストラクタの置き換え》
第12章《観察されるデータの複製》
第13章《委譲による継承の置き換え》
第14章《委譲の隠蔽》
第15章《継承の分割》
付録
【目次】
ホームページのお知らせ [ii]
はじめに [iii]
本書の特徴 [iv]
本書の読者 [v]
本書の構成 [v-vi]
本書のサンプルプログラム [vi-vii]
サンプルプログラムの入手
Mainクラスについて
謝辞(2006年12月 結城浩) [vii]
目次 [ix-xix]
本書の図について [xxi-xxvii]
UMLについて
クラス図
クラスとインタフェース
シーケンス図
コメントと役割
第0章 リファクタリングとは 001
この章で学ぶこと 002
リファクタリングとは 002
リファクタリングの定義
リファクタリング・クイズ
リファクタリングとユニットテスト
リファクタリングの目的
リファクタリングの限界
リファクタリングと「不吉な匂い」 006
不吉な匂いとは
不吉な匂いを示すセリフ
リファクタリング・カタログ 011
リファクタリング・カタログとは
システマティックな修正
リファクタリングのエッセンス 012
ステップ・バイ・ステップ:2つの修正を1度に行わない
ステップ・バイ・ステップ:後戻りしやすいように
ステップ・バイ・ステップ:ステップごとの確認
ステップ・バイ・ステップ:古いものを新しいものに変えていく
リファクタリングQ&A 014
リファクタリングは万能薬か
リファクタリングを学ぶ価値はあるか
動いているコードに手を入れていいのか
どこまでが 「外部」なのか
初期設計をしっかりするほうが有効ではないか
適切なリファクタリングを見つけるには
全部覚える必要はあるか
エクストリーム・プログラミングと関係があるか
デザインパターンと関係があるか
いまの職場でリファクタリングは難しい
練習問題 019
練習問題の解答 020
第1章 《シンボリック定数によるマジックナンバーの置き換え》――ソースに100と書いてあったら 021
この章で学ぶこと 022
リファクタリング 022
《シンボリック定数によるマジックナンバーの置き換え》
サンプルプログラム 022
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
タイプコードをクラスで置き換える
enum
シンボリック定数にしないほうがよい場合
バイトコードに埋め込まれる定数に注意
この章で学んだこと
練習問題
練習問題の解答
第2章 《制御フラグの削除》――制御フラグでコードが読みにくいなら 041
この章で学ぶこと
リファクタリング
《制御フラグの削除》
サンプルプログラム (Findint)
リファクタリング前
リファクタリング実行 (break を使う場合)
リファクタリング実行(return を使う場合)
サンプルプログラム (SimpleDatabase)
リファクタリング前
リファクタリング実行
あなたの考えを広げるためのヒント
break や returnで可読性が高くなる理由
インスタンスフィールドになった制御フラグの危険性
フラグの名前
boolean以外のフラグ
正規表現パッケージを使ってみると
この章で学んだこと
練習問題
練習問題の解答
第3章《アサーションの導入》――「これが成り立つはず」というコメントがあったら 061
この章で学ぶこと
リファクタリング
《アサーションの導入》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
コンパイルと実行
アサーションの動作確認
あなたの考えを広げるためのヒント
Javaのアサーション記法
アサーションはエラー処理の代わりには使えない
Javaのアサーションはクラスライブラリではない
アサーションの完全削除
他の言語環境でのアサーション
この章で学んだこと
練習問題
練習問題の解答
第4章 《ヌルオブジェクトの導入》――null チェックが多すぎるなら 079
この章で学ぶこと
リファクタリング
《ヌルオブジェクトの導入》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
Factory Method パターン
Singletonパターン
ヌルオブジェクトとしてネストしたクラスを使う
null チェックは悪なのか
パターン魔にならないように
定数としてのヌルオブジェクト
isNull メソッドは必要なのか
元になるクラスを修正できないときはどうするか
この章で学んだこと
練習問題
練習問題の解答
第5章 《メソッドの抽出》――コードが長すぎて読みにくいなら 101
この章で学ぶこと 102
リファクタリング 102
《メソッドの抽出》
サンプルプログラム 105
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント 111
逆のリファクタリング
《メソッドの抽出》 は当たり前?
メソッドは長くなっていくもの
この章で学んだこと 12
練習問題 114
練習問題の解答 114
第6章 《クラスの抽出》――クラスの責任が多すぎるなら 119
この章で学ぶこと
リファクタリング
《クラスの抽出》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
双方向リンクは避ける.
機能追加とリファクタリング
Immutable Interface.
逆のリファクタリング 《クラスのインライン化》
この章で学んだこと
練習問題
練習問題の解答
第7章 《クラスによるタイプコードの置き換え》――オブジェクトの識別にintが使われていたら
この章で学ぶこと
リファクタリング
《クラスによるタイプコードの置き換え》
サンプルプログラム
リファクタリング前
基本型を使ったタイプコードの問題点
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
基本型を使ったタイプコードの問題点
enum
この章で学んだこと
練習問題
練習問題の解答
第8章 《サブクラスによるタイプコードの置き換え》――タイプコードごとに振る舞いが違うなら (1)
この章で学ぶこと
リファクタリング
《サブクラスによるタイプコードの置き換え》
「構造」と「振る舞い」
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
switch文とinstanceof演算子は不吉な匂いを放つ
オブジェクト生成のswitch文の削除
Factory Method を複数個用意する
どこまでリファクタリングすべきか
この章で学んだこと
練習問題
練習問題の解答
第9章 《State/Strategy によるタイプコードの置き換え》――タイプコードごとに振る舞いが違うなら (2)
この章で学ぶこと
リファクタリング
《State/Strategyによるタイプコードの置き換え)
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
コードのさらなる修正
enum を使う
状態依存のコードを状態オブジェクトに移動する
さらに整える
あなたの考えを広げるためのヒント
タイプコードを置き換える3つの方法の比較
[State パターン]と[Strategy パターン]の違い
多態的な解決と defaultの消失
この章で学んだこと
練習問題
練習問題の解答
第10章 《例外によるエラーコードの置き換え》――エラー処理が散らばっているなら
この章で学ぶこと
リファクタリング
《例外によるエラーコードの置き換え》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
コードのさらなる修正
《State/Strategy によるタイプコードの置き換え》
あなたの考えを広げるためのヒント
チェックされる例外とチェックされない例外
例外の階層
java.io.EOFExceptionをめぐって
チェックされない例外と事前チェック用メソッド
エラーアトミック性
この章で学んだこと
練習問題
練習問題の解答
第11章 《Factory Method によるコンストラクタの置き換え》――クラス名がnewでハードコードされていたら 237
この章で学ぶこと
リファクタリング
《Factory Method によるコンストラクタの置き換え》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
《サブクラスによるタイプコードの置き換え》リファクタリングの実行
リファクタリング後
あなたの考えを広げるためのヒント
プロバイダ
引数の問題
Factory Method & Creation Method
この章で学んだこと
練習問題
練習問題の解答
第12章 《観察されるデータの複製》――モデルとビューが混在していたら
この章で学ぶこと
リファクタリング
《観察されるデータの複製》
サンプルプログラム
リファクタリング前
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
イベントに含める情報
何をイベントリスナーにするか
無限ループに注意
別のイベントリスナーを追加する
この章で学んだこと
練習問題.
練習問題の解答
第13章 《委譲による継承の置き換え》―― IS-A関係じゃないのに継承してたら
この章で学ぶこと
継承と委譲
継承
委譲
継承と委譲の比較
リファクタリング
《委譲による継承の置き換え》
サンプルプログラム
リファクタリング前
生じる疑問
リファクタリング実行
リファクタリング後
《コンストラクタの連鎖》
あなたの考えを広げるためのヒント
継承は最後の武器
リスコフの置換原則
IS-A関係と HAS-A関係
この章で学んだこと
練習問題
練習問題の解答
第14章 《委譲の隠蔽》――委譲先まで見えてたら
この章で学ぶこと
リファクタリング
《委譲の隠蔽》
サンプルプログラム
リファクタリング前
1回目のリファクタリング実行
1回目のリファクタリング後
2回目のリファクタリング実行
2回目のリファクタリング後
あなたの考えを広げるためのヒント
「隠す」 ことの重要性
さまざまな隠蔽
《仲介人の除去》
《クラスのインライン化》
この章で学んだこと
練習問題
練習問題の解答
第15章 《継承の分割》――継承がもつれていたら
この章で学ぶこと
リファクタリング
《継承の分割》
サンプルプログラム
リファクタリング前
生じる疑問
リファクタリング実行
リファクタリング後
あなたの考えを広げるためのヒント
直交性
継承と@Override
この章で学んだこと
練習問題
練習問題の解答
付録 363
付録A リファクタリング一覧 364
はじめに
適切な名前をつける
一時変数をなくす
条件分岐をシンプルにする
条件判定か例外か
オブジェクトをつくる
クラスやインタフェースを抜き出す
修正できないクラスにメソッドを追加する
カプセル化
状態を変えるかどうか
フィールドの位置を整える
メソッドの位置を整える
メソッドを作る
メソッドの引数を整える
タイプコードを置き換える
古いシステムへオブジェクト指向を導入する
値オブジェクトか参照オブジェクトか
モデルとビュー
継承と委譲を切り替える
委譲
継承
クラスの関連
付録B JUnit 400
入手とインストール 400
テストの作成 402
まとめ 408
付録C 参考文献とWebサイト 409
索引 [413-418]
著作一覧 [428]