Rubyのオブジェクト、インスタンス、クラスについて学ぶ
Ruby で扱える全ての値
オブジェクトがどのクラスに所属するかは、オブジェクトが生成された時に決まる
クラスに属するオブジェクトを、そのクラスの「インスタンス」という
オブジェクトは、クラスを元に作られるデータのかたまり
Ruby ではすべてのデータはオブジェクトである。すべてのオブジェクトは何らかのクラスに属し、メソッド呼び出しに反応する。 (Ruby用語集より) 「クラス名クラスのオブジェクト」
あるクラスに属すオブジェクトをそのクラスのインスタンスという。 (Ruby用語集より) 「クラス名クラスのインスタンス」
オブジェクトとインスタンスはほぼ同じ意味で使われる
「メソッドを呼び出されるオブジェクト」のことを「レシーバ」という
methodsメソッドを使うと、レシーバであるオブジェクトで呼び出せるメソッドの一覧を表示できる
例)p Integer.methods.sort
オブジェクトの種類を定義したもの
クラスそのものも、オブジェクトである。
p Array.class # => Class
クラスのnewメソッドを呼び出すことで、そのクラスのオブジェクト(インスタンス)を作れる
p Array.new #=> []
クラスを定義すると、クラスオブジェクトが生成され、クラス名と同じ名前の定数に代入される 先頭を大文字で始める
慣習としてアッパーキャメルケースを使う
initializeメソッドは、オブジェクトが作られるときに自動で実行される (コンストラクタ)
クラスの継承
class A < Bのようにクラスを定義すると、Bクラスを継承したAクラスを作れる
AはBの一種類という関係になる。
継承元であるBクラスを「スーパークラス」、継承先であるAクラスを「サブクラス」と呼ぶ
クラスの継承を使いたいと思った時は、機能ではなく、性質や概念の共通点に着目する
"サブクラスはスーパークラスの一種である" ( is-a の関係) かどうか
“サブクラスはスーパークラスの性質を特化したもので、反対にスーパークラスはサブクラスの性質を汎化したものである” (特化と汎化)
サブクラスで、スーパークラスと同名のメソッドを定義することで、スーパークラスのメソッドを上書きできる (オーバーライド)
super は現在のメソッドがオーバーライドしているメソッドを呼び出します。括弧と引数が省略された場合には現在のメソッドの引数がそのまま引き渡されます。引数を渡さずにオーバーライドしたメソッドを呼び出すには super() と括弧を明示します。
クラスを継承すると、クラスメソッドも引き継がれる
関連URL