#【クラスとインスタンス】
###クラスとは
共通で定義される部分をまとめる大元の型みたいなもの
###インスタンスとは
クラスの型を使って作られた派生した型みたいなもの
※“”で囲うと文字列を入力ができるメソッドや、[]で囲う事でArrayメソッドが利用ができるのは、予めStringクラスやArrayクラスという用意されたクラスがあるからであり、クラス自体を自分で定義する事も可能
####<クラスを自分で定義する方法>
class クラス名
処理
end
※クラス名の頭文字は必ず大文字
####<インスタンスを作成する方法>
変数名 = クラス名.new
※「.new」で、変数に代入
####<クラスメソッドを定義する方法>
class クラス名
def self.メソッド名
end
end
※classメソッドは定義するメソッド名の前にself.をつける
※使い方は、クラス名.メソッド名
####<クラスメソッドの使用例>
class Animal
def self.greet
p "こんにちは!Animalです!"
end
end
とクラスとクラスメソッドを定義すると、「Animal.greet」と書く事で、「"こんにちは!Animalです!”」が出力される
※クラスメソッドは、クラスしか呼び出せないため、「animal = Animal.new」とインスタンスを作成して「animl.greet」では「"こんにちは!Animalです!”」を書き出す事は出来ない
####<インスタンスメソッドを定義する方法>
class クラス名
def メソッド名
end
end
※クラスメソッドと違い「self.」をつけないだけ
※使い方は、インスタンス名.メソッド名
####<インスタンスメソッドの使用例>
class Animal
def greet
p "こんにちは!Animalのインスタンスです!"
end
end
と定義する事で、「animal = Animal.new」とインスタンスを呼び出せば、「animal.greet」と書く事で、「"こんにちは!Animalのインスタンスです!”」と書き出す事が出来る
##【initialize】
コンストラクタと呼ばれ、インスタンスが作成された(newメソッドが実行された)タイミングで呼ばれるメソッドのこと
※クラスからインスタンスを作成するときに共通の処理を行いたい場面で使用
####<使用例>
class Animal
def initialize
p "インスタンスが作られました"
end
end
と定義しておく事で「animal = Animal.new」とインスタンスが作成された時点で「"インスタンスが作られました”」と書き出される
#【クラス変数とインスタンス変数】
クラス内に定義する変数のこと
####クラス変数とは
クラスで使用できる変数のことで、クラスと、そのクラスからできたインスタンスから、呼び出すことができる変数
####<クラス変数の定義と代入>
class クラス名
@@クラス変数名 = 代入したいデータ
end
####インスタンス変数とは
インスタンスごとに独立し、インスタンスからのみアクセスすることができ、クラスからアクセスすることはできない変数
####<インスタンス変数の定義と代入>
class クラス名
def インスタンス変数名=(代入したいデータ名)
@インスタンス変数名 = 代入したいデータ名
end
def インスタンス変数名
@インスタンス変数名
end
end
と定義し、「インスタンス名 = クラス名.new」でインスタンスを作成後、「インスタンス名.インスタンス変数名 = 代入したいデータ」で代入が可能
※インスタンス変数はクラス内からしか呼び出せないため、上記の通りセッターとゲッターと呼ばれるメソッドをそれぞれ定義している
####セッターとは
インスタンス変数の値をセットするためのメソッドで「def インスタンス変数名=」と定義するのが一般的
####ゲッターとは
インスタンス変数の値を取得するためのメソッドで「def インスタンス変数名」と定義するのが一般的
※流れ的には、インスタンスを作成し、インスタンス変数にデータを代入し、代入された変数をゲッターでクラスが取得し、セッターでセットし、インスタンス名.インスタンス変数名で呼び出されている
####<attr_accessor>
上記のゲッターとセッターは、この「attr_accessor」を使用する事で、一括で指定することもできる
class クラス名
attr_accessor :インスタンス変数名
end
と定義し、「インスタンス名 = クラス名.new」でインスタンス作成後、「インスタンス名.インスタンス変数名 = 代入したいデータ」
###<クラス変数の使用例>
class Animal
@@counter = 0
def initialize
@@counter += 1
end
def self.get_counter
return @@counter
end
end
と定義する事で、
Animal.new
p Animal.get_counter
と書かれた際に、カウントされた数字が出力される
※「+= 1」は、クラス変数に1加算すると言う定義
※「return」は、メソッドの途中で抜け出し、その行の戻り値を返したい時に定義するメソッドで、省略も可能だが、複数行ある場合は、最後の戻り値が返される
####<インスタンス変数の使用例>
class Animal
def name=(value)
@name = value
end
def name
@name
end
end
と定義する事で、「animal = Animal.new」とインスタンスを作成した後、「animal.name = “サル”」と代入する事で、「p animal.name」と書けば「”サル”」と書き出される
####<インスタンス変数で、attr_accessorを使用した場合>
class Animal
attr_accessor :name
end
と定義する事で、「animal = Animal.new」とインスタンスを作成した後、「animal.name = “サル”」と代入する事で、「p animal.name」と書けば「”サル”」と書き出される
#【継承】
既存のクラスを元に新しいクラスを作成すること
####<定義の仕方>
class クラス名 < 継承したいクラス名
####<使用例>
class Animal
def self.greet
p "こんにちは!Animalです!"
end
end
と定義し、
class Dog < Animal
end
と継承し「Dog.greet」を書けば、「"こんにちは!Animalです!”」と書き出される
※継承後にクラス独自のメソッドも同じように定義可能