オブジェクト != インスタンス?
JSな人の疑問に、補足説明で404の中の人が答えているページをみて思った事。
2年前くらいの今頃、初めてJavaでClassを扱う事になりその際に、感覚として覚えたのは、
- Classはメモリーをどのように確保するのかを定義するもの
- インスタンスは、その定義に従って実際に確保されていた実体
という風に理解した。定義の仕方によって挙動(メソッド)も作り出すことが出来、クラスは新しく作られた型として取り扱えるため、クラスより生成されたインスタンスは、アップ・ダウンキャストする事でデータの変換を行う。また、キャストする為にインターフェースを用いて相互変換のルールを作っておくという風に理解して(感じて)いた。
オブジェクトの説明をする為に、あえて使ってないのかも知れないがエントリーを読むにつれオブジェクトってインスタンスの事か?という風に思った。
さらに疑問も湧いてきた。プロトタイプ=「オブジェクトの母」と書いてあり、クラス=「オブジェクトの設計図」とも書いてあるので、それって同じ事(プロトタイプ=クラス)に理解で出来てしまう。自分の感覚だと、メタクラス(SuperClass)>クラス>インスタンス(オブジェクト)という風に理解している。プロトタイプはメタクラスの事で、クラスはクラスの事かな?という風に理解した。コレは全然違う事を言っているのかな?<自分
他にも、動的言語の定義は、クラスを継承後に自由に拡張出来る言語という理解であってるのかな?とか、「クラスは改変可能ではあっても理由がなければ改変すべきではない」という不文律はJSになぜないのか?とか、疑問は尽きない。
未だに、人に対してクラスを的確に説明する事は出来ないが今回のエントリーで考える事が出来た。しかし、良く理解出来ない>説明出来ない
まとめ
Functionクラスを継承したクラスのインスタンス
がすっきり理解出来る気がする。オブジェクトって言葉を使わないといけないのかな?