Tbpgr Blog

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

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

内容

リファクタリング

フィールドの引き上げ

適用ケース要約

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
|