クラス、オブジェクト、インスタンスの違いを教えてください。
特定の言語についてでも構いませんが、その際は言語名称を明記してください。
概念が二つしかなく、いずれかが同一である場合は、どれが同一なのが一般的か教えてください。
http://www.nextindex.net/java/instance.html
Javaの場合は
オブジェクト = クラスとインスタンスの総称。
インスタンス = クラスを実体化したオブジェクトの実体
クラス = オブジェクトの型
http://www.atmarkit.co.jp/farc/rensai/column/world10/world10...
一般的なイデア論。
http://www.kmonos.net/alang/d/class.html
D言語だと
クラス プログラマ定義の型
オブジェクト = クラスオブジェクト = クラス
インスタンス = メモリ割り付け結果
カテゴリーの広さの違い、かな?
クラス:人間
オブジェクト:女の子、男の子(他にも母親とか、男とか、老人とか)
インスタンス:鈴木太郎君(5歳)、山田花子さん(19歳)、泉田フエさん(85歳)
みたいな感じで。
ありがとうございます。
私の意識では、人間がスーパークラスで、女の子、男の子などはサブクラスではないかと思われるのですが、いかがなものでしょうか。
クラスを特化するとオブジェクトになるということでしょうか。
たいやきで例えると
クラス=たいやきの型
インスタンス=たいやき
と考えるとわかりやすいと思います。
型に材料を流し込んでたいやきができるように、クラスをもとにして具体的なインスタンスが生成されるのです。
「オブジェクト」は「インスタンス」の一般的な呼び方です。
(オブジェクト指向ではインスタンスをオブジェクトとして取り扱うと言ったほうがいいのか・・・卵が先か鶏が先か・・・)
使い分けの仕方ですが、「インスタンス」と言った場合、必ずそれを生成するクラスの存在を意識しますが、「オブジェクト」という言葉はクラスを意識せずに使うことができます。
ありがとうございます。
インスタンス = 特定のクラスの実体
オブジェクト = クラスの実体
ということですね。
つまり、クラスを特定せず、例えば"たいやきクラス"のインスタンスと"人間クラス"のインスタンスをまとめて呼ぶとき、オブジェクトと呼べばいいのですかね。
オブジェクトをより具体的に言った言葉がインスタンスだということになりますね。
----
これなら理解できますが、上の方々はご意見が違う様子ですので、もう少し募集します。
ありがとうございます。
インスタンスが実体であることには揺れはなさそうですね。
オブジェクトがクラスとインスタンスの総称であるならば、Javaではオブジェクトは存在せず、クラスとインスタンスのみがあるということですね。(それをまとめてオブジェクトと呼ぶ?
クラスを実体化したら、インスタンスはクラスの実体になるのではないでしょうか。
クラスがオブジェクトの型ということは、クラスからオブジェクトが作成されるのですか?
クラスとインスタンスの解説を読むと、Javaの場合ではクラスとオブジェクトが同一化している感じです。
一番上のページにはクラスをインスタンス化するとオブジェクトになると書いてありますね。
わりに、「インスタンスはオブジェクトの実体で、メモリ上に保持された具体的な値から成っています。メモリ領域を占有している実体は、クラスとインスタンスしかありません。」
と、オブジェクトの実体こそがインスタンスであると書いてあり、また、クラスそのものもメモリ領域を占有する実体であるとも書いてあります。
ますますわからなくなりました。。。
真ん中のページですが、イデア論を論じている間はオブジェクトの概念が出てきませんでしたが、まとめで唐突に出てきましたね。
オブジェクトは実際にあるもので、クラスは概念、インスタンスはその概念を実体化したもの。
つまり、オブジェクトには元となるクラスが存在すると考えれば、インスタンスとオブジェクトはイコールのはずですね。
文章が短くて判断がつきづらいですが、揺れがないのでイデア論ではオブジェクトとインスタンスが同一と考えてよさそうですね。
一番下のページですが、オブジェクトはむしろインスタンスに近いように書いてあるように見えます。
「オブジェクトが削除される際に、 ガベージコレクタがデストラクタ関数を呼び出します。 」
と書いてありますが、クラスはプログラマが定義した型ですから、いちいち削除されるはずがありませんよね。
クラスオブジェクトの概念がハッキリしませんが、オブジェクトは少なくともクラスと全く同一というわけではないと言えそうです。