おことわり
- ざっくりとしたイメージを書きます
- 「JavaScript においては……」みたいなオタクなことは書きません
クラス、インスタンス、オブジェクト
クラスは設計図
クラス(Class) とは設計図のこと。
ただの設計図なので、これだけでは何の実物も生まれない。
英単語の意味を追いかけると「授業の単位」「分類」が出てくるが、ここでは関係ないので無視していい。
インスタンスは設計図からつくった実体
インスタンス(Instance) とは設計図からつくった実物のこと。
設計図にしたがってつくったら、基本的に常に同じ実物がつくられる。ただし設計図には「パラメーター」という設定の余地があって、ここを変えることで違うものをつくれる。
インスタンスの元は、必ずしもクラスではない ことに注意する。プログラミングでは「クラス」から「インスタンス」をつくる構図だが、他のジャンルではそうとは限らないのだ。たとえばクラウドのインフラでは、実際につくったサーバー一台一台をインスタンスと呼ぶが、これの元はクラスとは呼ばない。元に対する名前は無いか、あるいは「イメージ」や「起動テンプレート」だったりする。
オブジェクトは実体
オブジェクト(Object) とは実物のこと。
オブジェクトのうち、設計図からつくったものをインスタンスという。つまり インスタンスはオブジェクトの一種。
数式でたとえるのがわかりやすい
y = f(x) = ax + b を考える。
- クラスとは、ax + b という式のこと
- a や b は内部の仕様として決まっている
- ここでは a = 10、b = 5 にしよう
- つまり、ここではクラスとは 10x + 5 という式
- インスタンスとは、x というパラメーターに何か入れてつくった値のこと
- x = 1 を入れた場合、15 がインスタンス
- x = 100 を入れた場合、1005 がインスタンス
- x = 1 を 3 回入れたら、15 というインスタンスが 3 回出来上がる
- オブジェクトとは、数字のこと
- a や b、あるいは x のときに使った数字ではない
- 何らかの式から計算された数字のこと
おしまい
イメージはこれくらいで良い。
あとはそれぞれの文脈でどう定義され、どう対応しているかをちゃんと勉強する。