Rubyクラスについて

クラスの定義方法

クラスの作成

クラス名は必ず大文字で始める必要があります。


class クラス名
  クラス定義
end

コンストラクタ

initializeメソッドを使用します。
なお、Ruby には、他の言語でいうところのデストラクタはありません。


def initalize(path="/bin/local")
  @default_path = path
end

アクセスメソッド

インスタンス変数に対して直接アクセス(代入または参照)する場合に利用します。

定義 説明
attr_reader :val 参照のみ可能
attr_writer :val 変更のみ可能
attr_accessor :val 参照と変更が可能

メソッドのアクセス権

インスタンスメソッドのアクセス制限は以下の3種類です。

定義 説明
public メソッドをインスタンスメソッドとして公開します。
private クラス内部でのみ使用でき、外部非公開とします。
protected 同一クラスからはインスタンスメソッドとして呼び出せますが、それ以外の呼び出しを禁止します。

クラス関連変数

インスタンス変数について

「@」で始まる変数をインスタンス変数といいます。

インスタンス変数はクラスから作成されたオブジェクト毎に異なる値を格納できます。


クラス変数

クラス変数はクラスから作成された全てのオブジェクトで共有される変数となります。

クラス変数の変数名は「@@」で始まります。

クラス変数は、他言語では、静的プロパティ、静的メンバ変数、スタティック変数などとも呼びます。


クラス関連メソッド

インスタンスメソッド

クラス内に記述されたメソッドはクラスから作成されたインスタンス(オブジェクト)しか呼び出すことが出来ません。

このようなメソッドをインスタンスメソッドと呼びます。


クラスメソッド(静的メソッド)

インスタンス(オブジェクト)に対する操作ではなくて、クラスそのものに対する操作を行うメソッドとなります。

クラスメソッドは主にインスタンスの内容に依存しない処理を記述するのに用いられ、オブジェクトを生成しなくても呼び出すことができます。


クラスメソッドは以下3通りの定義方法があります。


class クラス名
  def クラス名.メソッド名
    #処理
  end

  def self.メソッド名
    #処理
  end
end
class クラス名
  def メソッド名
    #処理
  end
end

継承と拡張

クラスの継承

既存クラスは変更せずに、新しい機能を追加して新しいクラスを作成します。


class クラス名 < スーパークラス名
  クラス定義
end

クラスの拡張

すでに定義されているクラスにメソッドを追加することができます。


class 既存のクラス名
  def メソッド名
    メソッド処理
  end
end

関連ページ