【オブジェクト指向】

クラス、オブジェクト、インスタンスの違いを教えてください。

特定の言語についてでも構いませんが、その際は言語名称を明記してください。

概念が二つしかなく、いずれかが同一である場合は、どれが同一なのが一般的か教えてください。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2006/05/05 09:05:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:ma-kanoh No.1

回答回数155ベストアンサー獲得回数4

ポイント27pt

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言語だと

クラス プログラマ定義の型

オブジェクト = クラスオブジェクト = クラス

インスタンス = メモリ割り付け結果

id:Kenju

ありがとうございます。

インスタンスが実体であることには揺れはなさそうですね。

オブジェクトがクラスとインスタンスの総称であるならば、Javaではオブジェクトは存在せず、クラスとインスタンスのみがあるということですね。(それをまとめてオブジェクトと呼ぶ?

クラスを実体化したら、インスタンスはクラスの実体になるのではないでしょうか。

クラスがオブジェクトの型ということは、クラスからオブジェクトが作成されるのですか?

クラスとインスタンスの解説を読むと、Javaの場合ではクラスとオブジェクトが同一化している感じです。

一番上のページにはクラスをインスタンス化するとオブジェクトになると書いてありますね。

わりに、「インスタンスはオブジェクトの実体で、メモリ上に保持された具体的な値から成っています。メモリ領域を占有している実体は、クラスとインスタンスしかありません。」

と、オブジェクトの実体こそがインスタンスであると書いてあり、また、クラスそのものもメモリ領域を占有する実体であるとも書いてあります。

ますますわからなくなりました。。。

真ん中のページですが、イデア論を論じている間はオブジェクトの概念が出てきませんでしたが、まとめで唐突に出てきましたね。

オブジェクトは実際にあるもので、クラスは概念、インスタンスはその概念を実体化したもの。

つまり、オブジェクトには元となるクラスが存在すると考えれば、インスタンスとオブジェクトはイコールのはずですね。

文章が短くて判断がつきづらいですが、揺れがないのでイデア論ではオブジェクトとインスタンスが同一と考えてよさそうですね。

一番下のページですが、オブジェクトはむしろインスタンスに近いように書いてあるように見えます。

「オブジェクトが削除される際に、 ガベージコレクタがデストラクタ関数を呼び出します。 」

と書いてありますが、クラスはプログラマが定義した型ですから、いちいち削除されるはずがありませんよね。

クラスオブジェクトの概念がハッキリしませんが、オブジェクトは少なくともクラスと全く同一というわけではないと言えそうです。

2006/04/29 09:25:48
id:shimarakkyo No.2

回答回数387ベストアンサー獲得回数24

ポイント27pt

カテゴリーの広さの違い、かな?

クラス:人間

オブジェクト:女の子、男の子(他にも母親とか、男とか、老人とか)

インスタンス:鈴木太郎君(5歳)、山田花子さん(19歳)、泉田フエさん(85歳)

みたいな感じで。

id:Kenju

ありがとうございます。

私の意識では、人間がスーパークラスで、女の子、男の子などはサブクラスではないかと思われるのですが、いかがなものでしょうか。

クラスを特化するとオブジェクトになるということでしょうか。

2006/04/28 23:46:48
id:akagi_paon No.3

回答回数143ベストアンサー獲得回数13

ポイント27pt

たいやきで例えると


クラス=たいやきの型

インスタンス=たいやき


と考えるとわかりやすいと思います。


型に材料を流し込んでたいやきができるように、クラスをもとにして具体的なインスタンスが生成されるのです。


「オブジェクト」は「インスタンス」の一般的な呼び方です。

(オブジェクト指向ではインスタンスをオブジェクトとして取り扱うと言ったほうがいいのか・・・卵が先か鶏が先か・・・)


使い分けの仕方ですが、「インスタンス」と言った場合、必ずそれを生成するクラスの存在を意識しますが、「オブジェクト」という言葉はクラスを意識せずに使うことができます。

id:Kenju

ありがとうございます。

インスタンス = 特定のクラスの実体

オブジェクト = クラスの実体

ということですね。

つまり、クラスを特定せず、例えば"たいやきクラス"のインスタンスと"人間クラス"のインスタンスをまとめて呼ぶとき、オブジェクトと呼べばいいのですかね。

オブジェクトをより具体的に言った言葉がインスタンスだということになりますね。

----

これなら理解できますが、上の方々はご意見が違う様子ですので、もう少し募集します。

2006/04/29 00:03:16

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません