APITT - システム開発分野 - オブジェクト指向
「パターン指向リファクタリング」

content
リファクタリングとは
リファクタリングの動機
リファクタリングのこつ
パターンを使った上流設計
コードの臭い
Switch to Polymofism

ポリモフィズムによる条件分岐の置き換え

リファクタリング前のソース

リファクタリング後のソース1

リファクタリング後のソース2

リファクタリング手順

if文はどこへ消えた?

polymorphism(多態性)とは?

getArea は Shape に対して呼び出しているが、
実際の処理は Shape ではなく、受け手のオブジェクト(SquareやRectangleやEquilateralTriangle)で行われる


Compose Method

意図の伝わりやすい、詳細レベルが揃った小さなステップ群にロジックを変換する

リファクタリング前のソース

リファクタリング後のソース


Encapsulate Classes with Factory

インタフェース(または抽象クラス)を使ってプログラミングすることで、クラス間の結合度を下げる!

問題点
  1. Mainクラス(クライアント、利用者側)に沢山のクラスが登場している
  2. Mainクラスが複雑で理解に時間がかかる
リファクタリング手順
  1. REFACTORING001 : staticなメソッド forInteger,forDate,forString,... を クライアント(Main.java) に用意する
  2. REFACTORING002 : forInteger,forDate,forString,... の不要な引数を削除する
  3. REFACTORING003 : forInteger,forDate,forString,... の型を AttributeDescriptor にする
  4. REFACTORING004 : forInteger,forDate,forString,... メソッドを AttributeDescriptor クラスに移動する
  5. REFACTORING005 : BooleanDescriptor,DefaultDescriptor,ReferenceDescriptor のコンストラクタを protected にする
  6. REFACTORING006 : クライアント(Main.java) は descriptor パッケージを AttributeDescriptor のみを使ってプログラミングする(import descriptor.AttributeDescriptor;

クラス図

リファクタリング前のソース

リファクタリング後のソース(001)

リファクタリング後のソース(002)

リファクタリング後のソース(003)

リファクタリング後のソース(004)

リファクタリング後のソース(005)


Form Template Method

(P217)

メソッドを汎用化し、それから汎用メソッドを引き上げて Template Method を形成する。

前提知識

リファクタリング手順
  1. REFACTORING001 : 類似メソッドを抽出しメソッドの構造化を行う(capitalメソッドの内容を全て同じにする!)
  2. REFACTORING002 : 同一メソッドの定義(abstract method 定義)をスーパークラスである CapitalStrategy に引き上げる (例では riskFactorFor,duration,riskFactorFor)(別のCapitalStrategyを実装する際に何を実装すれば良いのか分かり易い!)
  3. REFACTORING003 : CapitalStrategy に引き上げるたメソッドを protected にする (外部から呼べないようにするため)
  4. REFACTORING004 : Template Method をスーパークラス CapitalStrategy に引き上げる(captionメソッド)(かつ、finalにしオーバーライドを禁止する!)

クラス図

リファクタリング前のソース

リファクタリング後のソース(001)

リファクタリング後のソース(002)

リファクタリング後のソース(003)

リファクタリング後のソース(004)


参考文献

  1. リファクタリング
  2. パターン指向リファクタリング入門

content
  1. リファクタリングとは
  2. リファクタリングの動機
  3. リファクタリングのこつ
  4. パターンを使った上流設計
  5. コードの臭い
  6. Switch to Polymofism
  7. Compose Method
  8. Encapsulate Classes with Factory
  9. Form Template Method
  10. 参考文献