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