ume

Ruby オブジェクト指向(継承)を学ぶ

前書き

オブジェクト指向の3つの特徴それぞれの理解が曖昧なので記事を通じて理解(どんな時に使うのなど)を深めたいと思います.
⚠️本記事は継承に焦点を合わせて作成します。

継承とは?

⇨子クラスを作成すること.
子クラスとは.
⇨親クラスのメソッドも使用できるクラスのこと.
親クラスと子クラスの例↓ 例

# Parentクラスの定義
class Parent
  # initializeメソッドの定義
  def initialize(name)
    @name = name
  end

  # メソッドの定義
  def greet
    puts "こんにちは、親クラスの#{@名前}です!"
  end
end

# Childクラスの定義(Parentクラスを継承)
class Child < Parent
  # initializeメソッドをオーバーライド

  # メソッドの定義
  def introduce
     puts "やあ、#{@名前}です。#{@年齢}歳です。子クラスからです!"
  end
end

# Parentクラスのインスタンス生成
parent = Parent.new("Parent")

# Childクラスのインスタンス生成
child = Child.new("Child", 10)

# メソッドの呼び出し
parent.greet
child.greet
child.introduce

コードの解説. ↓の箇所でParentクラスの子クラスを作成するという意味の書き方

class Child < Parent
継承の嬉しいところ
  • 複数の同じコードを1つにまとめることができ保守性が高まる。
    上のコードをよく見ると.
    子クラスにgreetメソッドが定義されていないのに実行されている。
child.greet

これで実行できるのは継承したことで親クラスに定義されているメソッドは子クラスでも実行可能

これを継承なしで表すと以下のようになる Parentクラス

class Parent
一部省略
def greet
    puts "こんにちは、親クラスの#{@名前}です!"
end
end 

Childクラス

class Child
一部省略
def greet
    puts "こんにちは、親クラスの#{@名前}です!"
end
end 

と同じメソッドの同じ処理が各クラスに定義されておりgreetメソッドの中身を変更しようとすると2箇所変えないといけないので保守性(メンテナンス性)が悪くなる。