見出し画像

クラスとインスタンスとは

Rubyはクラスとインスタンスと言う概念を用いて、プログラミングを書いている。
クラスは「雛形のようなもの」インスタンスは、クラスを元にして作られるデータのことで「クラスの特徴を持つ実体」のことを言う。
クラスは型
クラスは型を設定するためのもので共通しているところがある。その共通部分をまとめるのがクラスの役割
インスタンスはクラスから作られた実体。インスタンスはクラスの特徴を引き継ぐ、詳細はインスタンスによって異なる(特徴的なところ)
クラスを作ってみる
ArrayやStringのような初めから使用できるクラスの他に、自分でクラスを作る(定義する)ことも可能
クラスを定義するときは、以下のように書く
class クラス名
end
インスタンスを作ってみる
先ほどのAnimalクラスから、インスタンスを作ってみましょう。インスタンスはnewメソッドを実行することで作成する
コマンド
class Animal
end
animal = Animal.new
puts animal
返り値
#<Animal:0x00007fce64106230>
クラスメソッド
クラスメソッドは、クラス自身に関する情報の変更や参照に対して使うことのできるメソッドインスタンスに対しては使えない
定義
定義の方法は以下の通りです。
class クラス名
 def self.メソッド名
 end
end
基本的に他のメソッドと定義の方法は同じですが、classメソッドは定義するメソッド名の前にself.をつける。
呼び出し
クラスメソッドの呼び出しは以下のように行う。
クラス名.メソッド名
コマンド
class Fish
 def self.hello
 puts "こんにちは!Fishです"
 end
end
Fish.hello
返り値
こんにちは!Fishです
インスタンスメソッド
インスタンスメソッドは、個別のインスタンスに関する情報の変更や参照の役割りを持っていて、インスタンスからしか呼び出せないメソッド。
定義
インスタンスメソッドの定義は、クラスメソッドと違い「self.」をつけない
class クラス名
 def メソッド名
 end
end
コマンド
class Fish
 def hello
 puts "こんにちは!Fishです"
end
end
fish = Fish.new
fish.hello
返り値
こんにちは!Fishです
・initialize
クラスから、インスタンスを作成するときに共通の処理を行うそのときはinitializeメソッドを使用するinitializeメソッドはコンストラクタとも呼ばれ、インスタンスが作成された(newメソッドが実行された)タイミングで呼ばれるメソッド
コマンド
class Fish
def initialize
puts "こんにちは!Fishです"
end
end
fish = Fish.new
返り値
こんにちは!Fishです
クラスに変数を定義するクラス内に定義する変数はメソッドと同じく、クラス変数とインスタンス変数の2種類
・クラス変数
クラス変数は、クラスで使用できる変数クラスと、そのクラスからできたインスタンスから、呼び出せる
クラス変数は、「@@」の後に、クラス変数名を続けることで定義する
・インスタンス変数
インスタンス変数はインスタンスごとに独立している変数インスタンスからのみアクセスすることができ、クラスからアクセスすることはできない
・定義と呼び出し
インスタンス変数は「@」の後に、変数名をつけることで定義する
インスタンスごとに独立した変数になっている
インスタンス変数はクラス内からしか呼び出せないため、クラス外から呼び出すためにはセッター、ゲッターと呼ばれるメソッドを定義する必要
・セッター
セッターは、インスタンス変数の値をセットするためのメソッド
def 変数名=
と定義するのが一般的、=もメソッドの一部
・ゲッター
ゲッターはインスタンス変数の値を取得するためのメソッド
def 変数名
と定義するのが一般的
・attr_accessor
上記のゲッターとセッターは、「attr_accessor」を使用することで、一括で指定すること
継承
継承では、あるクラスが既に作成されている場合に、そのクラスをもとに新しいクラスを作成することが可能
class クラス名 < 継承したいクラス名
コマンド
class Fish
def initialize
puts "こんにちは!Fishです"
end
end
class Tai < Fish
end
tai = Tai.new
返り値
こんにちは!Fishです

プログラムを書いていくときに、役割を色々と与えてどういった動作を行うかをクラスとインスタンスで実行していくだと考えている。色々スマートにコーディングしていく上では、大切な技術なので学んでいきたいと思う。個人的は、どこの変数やクラスの変数が取り出せない!などと思って困惑しそうだなと思いました。
頑張っていきたいと思う。
連続投稿6日目!!

この記事が気に入ったらサポートをしてみませんか?