Tbpgr Blog

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

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

内容

リファクタリング

フィールドの引き下げ

適用ケース要約

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

適用内容要約

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

適用詳細

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

サンプル

プログラマークラスから派生した、エキスパートプログラマークラスとビギナープログラマークラスがあるとします。
エキスパートプログラマーは弟子を持っています
ビギナープログラマーは弟子を持っていません

サンプルコード

リファクタリング

# encoding: Shift_JIS

class Programmer
  attr_accessor:name,:disciple
  def initialize(name,disciple)
    @name=name
    @disciple=disciple
  end
end

class ExpertProgrammer < Programmer
end

class BeginnerProgrammer < Programmer
end

beginner_pg = BeginnerProgrammer.new("suzuki",nil)
expert_pg = ExpertProgrammer.new("tanaka",beginner_pg)
puts beginner_pg.name
puts expert_pg.name
puts expert_pg.disciple.name


リファクタリング

# encoding: Shift_JIS

class Programmer
  attr_accessor:name
  def initialize(name)
    @name=name
  end
end

class ExpertProgrammer < Programmer
  attr_accessor:disciple
  def initialize(name,disciple)
    super(name)
    @disciple=disciple
  end
end

class BeginnerProgrammer < Programmer
end

beginner_pg = BeginnerProgrammer.new("suzuki")
expert_pg = ExpertProgrammer.new("tanaka",beginner_pg)
puts beginner_pg.name
puts expert_pg.name
puts expert_pg.disciple.name

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

suzuki
tanaka
suzuki