技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

サブクラスの抽出【リファクタリング】

状況


対処

  • その一部の特性を持つサブクラスを作成する


メリット

  • クラス内の記述量が減り、可読性が上がる


「クラスの抽出」と比較して容易ではありますが、制約があります。
オブジェクトが生成された後は、クラスに基づく振る舞いを変更することができません。
また、1種類のバリエーションしか表現することができません。

手順

  • 元のクラスに新しいサブクラスを定義する

  • 新しいサブクラスにコンストラクタを用意する

  • スーパークラスのコンストラクタへの呼び出しを全て見つける。もしそれらがサブクラスを必要とするなら、新しいコンストラクタへの呼び出しに置き換える

  • 「メソッドの引き下げ」と「フィールドの引き下げ」を適用して、一つずつ特性をサブクラスに移動する

  • 継承階層で表現できる情報を示すフィールドを探す(通常boolean型かタイプコード)。これを「自己カプセル化フィールド」を適用して削除する。さらに「ポリモーフィズムによる条件記述の置き換え」を適用して、定数を返すポリモーフィックなgetメソッド(定数を返す)に置き換える。

  • 引き下げが終わるごとに、コンパイルしてテストする

楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本