はじめに
今回は「Rubyを構成している3種類のオブジェクト」というタイトルで書いていきます。
学習している中で、rubyを構成しているのは大きく以下の3つだと感じました、
・クラス
・インスタンス
・モジュール
今まではクラスとインスタンスしか知らなかったのですが、モジュールについて勉強した際に
「クラスの中にモジュールをミックスインして、インスタンスを作成する」流れを見てそう思いました。
この記事では「上記3つ」と「オブジェクト」について
自分なりに感じたことを書いていきたいと思います!
(上記3つについて細かく説明しているわけではないです)
「Ruby3.2リファレンスマニュアルのオブジェクトとは」より抜粋
オブジェクトは、特定のクラスに対比して、その「インスタンス」とも呼ばれます。
「IT用語辞典バイナリのオブジェクトとは」より抜粋
オブジェクトは、いわゆる「物体」や「対象」といった意味であるが、現実の世界に存在する事象や概念を指す場合もあるし、そうした事象や概念をモデルとして再現したものや、さらには現実世界には存在せずにモデル上のみに存在する何物かを指すこともある。
クラスとインスタンスとオブジェクト
オブジェクトという表現が抽象的で、色々な捉え方ができるのが難しい理由なのかなと思います
rubyではオブジェクトとインスタンスは同じようですね。
クラスとインスタンスは、スクールやサイトでよく見る表現で
・クラス:設計図 (例、たい焼き機)
・インスタンス:設計図からできた実体 (例、たい焼き)
のような例えを見てなんとなくわかった気になっていました。
しかしふと、オブジェクトとインスタンスが同じなら
「Rubyは全てがオブジェクトということは、全てがインスタンスということ???」
「そもそも同じ意味ならわざわざ2つの言葉が存在する意味はなぜ???」
という疑問が湧き、頭の中が混乱しました。
ネット検索している中で
「クラス・インスタンス・オブジェクトの違いは神の気分になるとわかる」(最後にURLを掲載してます)
という記事を見た際に、少しわかりました。
内容としては
・オブジェクトはすべての物や事柄などを指している
・クラスはオブジェクトの設計図のようなもの
・インスタンスはクラスを元に作ったオブジェクトのこと
・「インスタンスはオブジェクトである」と言えるが、「オブジェクトはインスタンス」と言えない
といったものです。
もはや少し哲学的な内容にはなりますが、オブジェクトとインスタンスは厳密にいうと言葉としては違うのだなという感じです。
ここまででなんとなく、オブジェクトとクラスとインスタンスの違いはわかりました。
しかし、「rubyは全てがオブジェクトならクラスやモジュールもオブジェクトじゃないとおかしいな」と感じました。
結論から言うと、クラスとモジュールもオブジェクト(インスタンス)です。
これについては次回「③クラスについて理解の深掘り」で書いてみたいと思います。
まとめ
・オブジェクトとインスタンスはほとんど同じ意味だが、インスタンスはクラスを元に作ったもので、オブジェクトはより概念的なものという違いがある。
・Rubyにおいてはインスタンスとオブジェクトは同じ意味で使っても問題ない。
・クラスとモジュールもオブジェクト(インスタンス)
参考にしたサイト
・Ruby 3.2 リファレンスマニュアル>オブジェクト
・IT用語辞典バイナリ>オブジェクトとは
・クラス・インスタンス・オブジェクトの違いは神の気分になるとわかる