Edited at

【Ruby】オブジェクト指向

More than 1 year has passed since last update.


オブジェクト指向とは

開発を効率よく進めるための重要な概念

=> 設計図を元に部品を作成し、その部品を使用して完成品を作ろう!!という考え方のこと


例:「車」の製作過程


  • 設計図:車の設計図

  • 部品:ハンドル、タイヤ、エンジン、ボディー

  • 完成品:車


設計図なしに車を作る


  • ものすごくめんどくさい

  • カスタマイズしにくい

  • 品質が悪い


設計図を元に車を作る


  • 効率が良い(再利用性)

  • カスタマイズしやすい(拡張性)

  • 品質が担保できる(保守性)


Rubyの世界だと、、、、、


  • 設計図 => クラス

  • 部品 => オブジェクト

  • 完成品 => Webアプリケーション

実は文字列もクラスから生まれたオブジェクトの一つ。

puts String.new("Hello World")

puts "Hello World"


設計図(クラス)なし車を生み出す場合

car1_price = 1000000

car1_color = "red"
car1_speed = 120
car1_accel = "進む"
car1_brake = "止まる"

car2_price = 1000000
car2_color = "red"
car2_speed = 120
car2_accel = "進む"
car2_brake = "止まる"

car3_price = 1000000
car3_color = "red"
car3_speed = 120
car3_accel = "進む"
car3_brake = "止まる"


設計図をもとに車を生み出す場合

車の設計図を作る

- Carクラスの定義

クラス名の先頭は大文字

クラスの構成要素


  1. インスタンス変数(クラスが持つ情報)

  2. イニシャライザ(初期値を設定するもの)

  3. メソッド(一連の処理の塊)

class Car

# 1. インスタンス変数
    # attr_accessor はセッター、ゲッターを合わせた機能を持つ
attr_accessor :price, :color, :speed

# 2. イニシャライザ(初期値を設定するもの)
# クラスがオブジェクト化されたときに自動で実行される
def initialize(price, color, speed)
self.price = price
self.color = color
self.speed = speed
end

# 3. メソッド(機能)
def accel
self.speed += 10
end

def brake
self.speed -= 10
end

end


クラスをオブジェクト化するやり方

car1(オブジェクト名) = Car(クラス名).new(オブジェクトを生み出す)

car1 = Car.new(3123424242, "Black", 200)

car2 = Car.new(2000000, "Red", 300)
car3 = Car.new(10000000, "Green", 100)
car4 = Car.new(3444887437, "Black", 200)
car5 = Car.new(474366437, "Black", 150)

puts car1.price
puts car1.accel
puts car2.accel
puts car3.accel
puts car4.accel
puts car5.accel

puts <<~TEXT

car1の値段を5割引します
#{car1.pricedown(5)}

TEXT


フィールドにアクセスする

puts <<~HEREDOC

car1の値段:#{car1.price}
car2の値段:
#{car2.price}
car3の値段:
#{car3.price}
car4の値段:
#{car4.price}
car5の値段:
#{car5.price}

HEREDOC


メソッドを呼び出す

puts <<~HEREDOC

car1のアクセルを踏む:スピードが#{car1.accel}km/hになった
car2のアクセルを踏む:スピードが
#{car2.accel}km/hになった
car3のアクセルを踏む:スピードが
#{car3.accel}km/hになった
car4のアクセルを踏む:スピードが
#{car4.accel}km/hになった
car5のアクセルを踏む:スピードが
#{car5.accel}km/hになった

HEREDOC