パンくず
リファクタリング-プログラマーの体質改善テクニック
継承の取り扱い
フィールドの引き上げ
内容
リファクタリング名
フィールドの引き上げ
適用ケース要約
2つのサブクラスが同じフィールドを持っている。
適用内容要約
そのフィールドをスーパークラスに移動する。
適用詳細
複数のサブクラスが同じフィールドを持っている場合、
継承元に引き上げを行う。
サンプル
プログラマークラスから派生した、JavaプログラマークラスとRubyプログラマークラスがあるとします。
リファクタリング前は双方のクラスに名前フィールドと主言語フィールドがあります。
この属性は共通の属性になるため、継承元に引き上げます。
サンプルコード
# encoding: Shift_JIS class Programmer attr_accessor:main_language end class JavaProgrammer < Programmer attr_accessor:name def initialize(name) @name=name @main_language="Java" end end class RubyProgrammer < Programmer attr_accessor:name def initialize(name) @name=name @main_language="Ruby" end end java_pg = JavaProgrammer.new("tanaka") ruby_pg = RubyProgrammer.new("suzuki") puts java_pg.name puts ruby_pg.name
# encoding: Shift_JIS class Programmer attr_accessor:name,:main_language end class JavaProgrammer < Programmer def initialize(name) @name=name @main_language="Java" end end class RubyProgrammer < Programmer def initialize(name) @name=name @main_language="Ruby" end end java_pg = JavaProgrammer.new("tanaka") ruby_pg = RubyProgrammer.new("suzuki") puts java_pg.name puts ruby_pg.name
出力(リファクタリング後)
>>||
tanaka
suzuki
|