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は変更できない。このように、外部からインスタンス変数を簡単に操作することができる。
上記のようなクラスでは、値だけを持つオブジェクトが作られる。これを、値オブジェクトという。