Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | 継承の取り扱い | メソッドの引き下げ

内容

適用ケース要約

スーパークラスのふるまいが、一部のサブクラスでしか使われない。

適用内容要約

フィールドをサブクラスに移す。

適用詳細

スーパークラスに保持しているメソッドが一部のサブクラスからしか利用されない場合

サンプル

プログラマークラスから派生した、エキスパートプログラマークラスとビギナープログラマークラスがあるとします。
エキスパートプログラマーは振る舞い駆動でコーディングします
ビギナープログラマーはコピペ駆動でコーディングします

サンプルコード

リファクタリング

# encoding: Shift_JIS

class Programmer
  def copy_paste_driven_programming()
    puts "CDD programming"
  end
  def behavior_driven_programming()
    puts "BDD programming"
  end
end

class ExpertProgrammer < Programmer
end

class BeginnerProgrammer < Programmer
end

expert_pg = ExpertProgrammer.new()
beginner_pg = BeginnerProgrammer.new()
expert_pg.behavior_driven_programming
beginner_pg.copy_paste_driven_programming


リファクタリング

# encoding: Shift_JIS

class Programmer
end

class ExpertProgrammer < Programmer
  def behavior_driven_programming()
    puts "BDD programming"
  end
end

class BeginnerProgrammer < Programmer
  def copy_paste_driven_programming()
    puts "CDD programming"
  end
end

expert_pg = ExpertProgrammer.new()
beginner_pg = BeginnerProgrammer.new()
expert_pg.behavior_driven_programming
beginner_pg.copy_paste_driven_programming

出力(リファクタリング後)

BDD programming
CDD programming