0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

醤油でオブジェクト指向を理解する

0
Last updated at Posted at 2019-12-21

ふと思いついた。醤油でオブジェクト指向を解説したくなった。

カバーしていること
クラスの継承とダックタイピング

#  全ての醤油の神
class 醤油

  attr_reader :saltiness, :sweetness, :thickness

  def initialize(attr)
    @saltiness = attr[:saltiness] || default_saltiness
    @sweetness = attr[:sweetness] || default_sweetness
    @thickness = attr[:thickness] || default_thickness
  end

  def default_saltiness
    raise "小クラスで定義してくださいまし"
  end

  def default_sweetness
    raise "小クラスで定義してくださいまし"
  end

  def default_thickness
    raise "小クラスで定義してくださいまし"
  end

  def describe_saltiness
    raise "小クラスで定義してくださいまし"
  end

  def describe_sweetness
    raise "小クラスで定義してくださいまし"
  end

  def describe_thickness
    raise "小クラスで定義してくださいまし"
  end

end

class キッコーマンの普通の醤油 < 醤油

  def describe_saltiness
    "すげーしょっぱい"
  end

  def describe_sweetness
    "全然甘くない"
  end

  def describe_thickness
    "めっちゃさらさら"
  end

  private

  def default_saltiness
    100
  end

  def default_sweetness
    10
  end

  def default_thickness
    5
  end
end

class キッコーマンの減塩の醤油 < 醤油

  def describe_saltiness
    "まぁまぁしょっぱい"
  end

  def describe_sweetness
    "全然甘くない"
  end

  def describe_thickness
    "めっちゃさらさら"
  end

  private

  def default_saltiness
    70
  end

  def default_sweetness
    20
  end

  def default_thickness
    10
  end
end

class どこかの甘い醤油(多分九州とかで愛用されてる系の醤油) < 醤油

  def describe_saltiness
    "全然しょっぱくない"
  end

  def describe_sweetness
    "めっちゃ甘い"
  end

  def describe_thickness
    "けっこうトロトロ"
  end

  private

  def default_saltiness
    10
  end

  def default_sweetness
    60
  end

  def default_thickness
    30
  end
end



普通の醤油 = キッコーマンの普通の醤油.new
減塩の醤油 = キッコーマンの減塩の醤油.new
甘い醤油 = どこかの甘い醤油(多分九州とかで愛用されてる系の醤油).new

普通の醤油.describe_saltiness
# => "すげーしょっぱい"

普通の醤油.describe_sweetness
# => "全然甘くない"

普通の醤油.describe_thickness
# => "めっちゃさらさら"


減塩の醤油.describe_saltiness
# => "まぁまぁしょっぱい"

減塩の醤油.describe_sweetness
# => "全然甘くない"

減塩の醤油.describe_thickness
# => "めっちゃさらさら"


甘い醤油.describe_saltiness
# => "全然しょっぱくない"

甘い醤油.describe_sweetness
# => "めっちゃ甘い"

甘い醤油.describe_thickness
# => "けっこうトロトロ"
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?