パンくず
リファクタリング-プログラマーの体質改善テクニック
継承の取り扱い
フィールドの引き下げ
内容
リファクタリング名
フィールドの引き下げ
適用ケース要約
スーパークラスのふるまいが、一部のサブクラスでしか使われない。
適用内容要約
フィールドをサブクラスに移す。
適用詳細
スーパークラスに保持しているフィールドが一部のサブクラスからしか利用されない場合
サンプル
プログラマークラスから派生した、エキスパートプログラマークラスとビギナープログラマークラスがあるとします。
エキスパートプログラマーは弟子を持っています
ビギナープログラマーは弟子を持っていません
サンプルコード
# 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