Ruby

Rubyのクラスとオブジェクトについて解説

Rubyはオブジェクト指向プログラミング(OOP)をサポートしており、クラスとオブジェクトはその中心的な概念です。クラスはオブジェクトの設計図であり、オブジェクトはクラスのインスタンスです。以下に、Rubyのクラスとオブジェクトについて詳しく解説します。

クラス

クラスは、オブジェクトの共通の属性(データ)と動作(メソッド)を定義するためのテンプレートです。クラスは、classキーワードを使用して定義します。

構文

class クラス名
  # クラスの属性(データ)とメソッド(動作)を定義
end

class Person
  # 初期化メソッド(コンストラクタ)
  def initialize(name, age)
    @name = name  # インスタンス変数
    @age = age    # インスタンス変数
  end

  # メソッドの定義
  def greet
    puts "Hello, my name is #{@name} and I am #{@age} years old."
  end
end

オブジェクト

オブジェクトは、クラスのインスタンスです。クラスをもとにオブジェクトを作成し、そのオブジェクトに対して定義されたメソッドを呼び出すことができます。

オブジェクトの生成

オブジェクトを生成するには、newメソッドを使用します。

# Personクラスのインスタンスを生成
person = Person.new("Alice", 30)

メソッドの呼び出し

生成したオブジェクトに対してメソッドを呼び出すには、オブジェクト名に続けてドット(.)とメソッド名を使用します。

person.greet  # 出力: Hello, my name is Alice and I am 30 years old.

インスタンス変数

インスタンス変数は、オブジェクトごとに固有のデータを保持するために使用されます。インスタンス変数は、@で始まります。

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "Hello, my name is #{@name} and I am #{@age} years old."
  end
end

アクセサメソッド

Rubyでは、インスタンス変数へのアクセスと変更を簡単にするために、アクセサメソッドを定義することができます。アクセサメソッドは、attr_accessorattr_readerattr_writerを使用して定義します。

class Person
  attr_accessor :name, :age  # 読み書き可能なアクセサメソッドを定義

  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "Hello, my name is #{@name} and I am #{@age} years old."
  end
end

person = Person.new("Alice", 30)
puts person.name  # 出力: Alice
person.name = "Bob"
puts person.name  # 出力: Bob

クラスメソッド

クラスメソッドは、クラス自体に関連付けられたメソッドです。クラスメソッドは、クラス名に続けてドット(.)とメソッド名を使用して呼び出します。クラスメソッドは、メソッド名の前にself.を付けて定義します。

class Person
  def self.description
    puts "This is the Person class."
  end
end

Person.description  # 出力: This is the Person class.

継承

継承は、既存のクラスを基にして新しいクラスを作成するための機能です。新しいクラス(サブクラス)は、既存のクラス(スーパークラス)の属性とメソッドを継承します。継承は、<記号を使用して定義します。

class Animal
  def initialize(name)
    @name = name
  end

  def speak
    puts "#{@name} makes a sound."
  end
end

class Dog < Animal
  def speak
    puts "#{@name} barks."
  end
end

dog = Dog.new("Rex")
dog.speak  # 出力: Rex barks.

モジュール

モジュールは、関連するメソッドや定数をグループ化するための機能です。モジュールは、クラスにミックスインすることで、そのクラスにモジュールの機能を追加することができます。

module Speak
  def speak(sound)
    puts sound
  end
end

class Person
  include Speak
end

person = Person.new
person.speak("Hello!")  # 出力: Hello!

まとめ

Rubyのクラスとオブジェクトは、オブジェクト指向プログラミングの基本です。クラスはオブジェクトの設計図であり、オブジェクトはクラスのインスタンスです。クラスを使用してオブジェクトを生成し、そのオブジェクトに対してメソッドを呼び出すことで、プログラムの構造を明確にし、再利用性を高めることができます。

スポンサーリンク

-Ruby