contents memorandum はてな

目次とメモを置いとく場

『Java言語で学ぶリファクタリング入門』(結城浩 ソフトバンククリエイティブ 2007)

著者:結城 浩[ゆうき・ひろし](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]