クラスとインスタンスのまとめ

Rubyをはじめたころの自分の記事が意外にも分かりやすかったので、改変して再掲載しますw
クラスメソッドとインスタンスメソッド - mic_footprints

☆クラスメソッド

クラスとは
  • クラスとは、オブジェクトの種類を表したもの
  • つまり、複数のオブジェクト(インスタンス)の枠組みと捕らえてよいでしょう
自然言語で言い表してみた

もっと分かりやすくするために、クラスが学級で、インスタンスが生徒とします
生徒(インスタンス)は漏れなく学級(クラス)に属しています

  • 学級(クラス)には、学級ごとのルールがある
    • 生徒(インスタンス)は、学級(クラス)のルールに従って行動(メソッド)を起こす
    • 生徒(インスタンス)は、このルールによって、行動(メソッド)が限定される
    • つまり、インスタンスは、クラスによって使えるメソッドが違うということ

クラスメソッドとは
  • クラスに直接働きかけるメソッドのこと
Student.find(1)
    • findメソッドはStudentクラスに直接働きかけている
    • つまり、クラスメソッド


学級と生徒で例えてみる

  • 状況
    • C組という学級(クラス)がある
    • C組には太郎君、花子さんがいる
    • つまり、太郎君、花子さんは、C組クラスのインスタンス(C組オブジェクト)
  • C組の太郎君を探すメソッドを呼び出す
C.sagasu("太郎君")
    • ここでのsagasuメソッドは、クラスメソッド
    • sagasuメソッドはC組に直接働きかけている


たとえば、C組の太郎君を廊下に立たせるためのメソッドというのはクラスメソッドではありません
これは、次で説明するインスタンスメソッドです

インスタンスメソッド

インスタンスとは
  • データを表現する基本的な単位
  • オブジェクトともいう
  • インスタンスには、様々な種類があり、それが先ほど説明したクラスということになる
インスタンスメソッドとは
["1","2","3"].index(1)


先ほど同様、学級と生徒で例えてみる

  • 太郎君を廊下に立たせるメソッド
# 変数taroに「C組クラスの太郎君」を代入
taro = C.sagasu("太郎君")

# もちろん、taroはC組クラスのインスタンスということになる

taro.rouka_ni_tataseru
    • ここでのrouka_ni_tataseruメソッドは、インスタンスメソッド
    • rouka_ni_tataseruメソッドはC組クラスのインスタンスであるtaroに直接働きかけている

☆メソッドとレシーバ

  • メソッド(method)が働きかける先をレシーバ(receiver)という
メソッド
  • オブジェクトに関連する操作を行う
  • Rubyでは、全ての操作がメソッドとして実装されている


メソッドの呼び出し

オブジェクト.メソッド名(第一引数, 第二引数, 第三引数, ・・・, 第N引数)
  • メソッドを実行するということは、「オブジェクトにメッセージを送る」ということ
  • 引数がある場合は、引数と共にメッセージが送られるというイメージ
レシーバ
  • メソッドから操作されるもの
  • つまり、「オブジェクトはメッセージを受け取る(receive)」ということ


クラスメソッドとインスタンスメソッドに於いて


個人的な感想ですが、レシーバを意識することで、オブジェクト指向の感覚がつかめた気がします。
プログラミングをはじめたばかりの方々に少しでも参考になれば幸いです。


たのしいRuby 第3版

たのしいRuby 第3版


最後まで、お読み頂きありがとうございました!