classについて

classには以下の役割がある。
+ オブジェクトが持つデータの情報を変数・定数にまとめる
+ オブジェクトが持つ手続きをメソッドにまとめる
+ インスタンスを作成するためのnewクラスメソッドの提供
クラスを定義することで、抽象的な概念を分類し名前を付けて利用する事が出来る。


インスタンス変数
オブジェクト処理対象となるデータを格納する変数で、オブジェクトと同じ寿命を持つ。

Rubyでは「@」で始まる変数をインスタンス変数とする。インスタンス変数の初期化はinitializeメソッド内で行う。

属性
外部に公開するオブジェクトの状態

オブジェクトの状態はオブジェクト自身が管理しており、外部に紹介していない。インスタンス変数もオブジェクトの状態として、中に含まれている。インスタンス変数を外部へ紹介したい場合は、そのための設定するメソッドがある。値を参照するメソッド(リーダメソッド)、値を設定する(ライタメソッド)、二つを合わせたメソッド(アクセサメソッド)だ。

class Player
  def initialize()
    @point = 0
    @choice = nil
  end

  attr_accessor :choice
  attr_reader :point
end
player=Player.new()
player.choice = "hoge"
player.point = 1

※「attr_accessor :choice」の「:choice」はシンボル
choiceは値が変更できるが、pointは変更できない。このように、外部からインスタンス変数を簡単に操作することができる。

上記のようなクラスでは、値だけを持つオブジェクトが作られる。これを、値オブジェクトという。