ここから本文です

Javaの「インスタンス」と「オブジェクト」の違いと、「インスタンス化」の概念の...

change_life_85さん

2010/10/1419:45:06

Javaの「インスタンス」と「オブジェクト」の違いと、「インスタンス化」の概念の認識が
正しいかどうか、教えて下さい!!

最近、知恵袋ユーザーの皆さんに毎日のように
助けて頂き、とても感謝しております。

閲覧くださり、ありがとうございます!!



今回は、
「オブジェクト」と「インスタンス」の違いと「インスタンス化」についてなのですが、


<私の認識>↓
「インスタンス」とは・・・・

変数のことであり、それは値そのものが入っている場合と、参照型のものがあり、
インスタンス化(オブジェクトにするための技法<new>を使う)する前なので、
実体がないため、操作は出来ない。
いわば”設計書に、ただ書かれている状態”であり、

結論的には『オブジェクトになる前の変数』のことである。

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


「オブジェクト」とは・・・・

上に書かれているインスタンスをnew演算子を使って、
実体化したもの。

操作ができる。

※ここで、よくHPにも「操作ができる」という解釈が載っているのですが、
操作ができるという意味がよく解りません。
それは、実際にアプリを作成し、newをした”オブジェクト”の状態でないと、
メソッドや値を利用することが出来ないということでしょうか?

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

「インスタンス化」とは・・・・

インスタンス化とは言うが、実際には”実体にするための作業”なので、
解釈が間違っていなければ、

『インスタンス化というよりは、”オブジェクト化”という言葉が合っている気がする。』

つまり、インスタンス化とは、オブジェクトにするために、
new演算子を使って、オブジェクトにするための工程作業だ。



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




以上が3点に関する私の解釈ですが、どこか間違い、訂正カ所がありましたら、
教えて下さい。


※当方、java初心者のため、たとえ話や解りやすい言葉だと助かります。




回答、お待ちしております。

補足皆様本当にありがとうございます!すごい間違いをしてました・・怖

・クラス・・仕様書。必要な変数とメソッドという内容を記載してある

・インスタンス・・クラスをもとにnewして実体になったもので、実際の操作が可能

・オブジェクト・・オブジェクトはすべてを網羅している型であるから、
すべての変数とメソッドの要素を含んでいる。なので、インスタンスとクラスの総称と言っても違いはない

ということでよろしいでしょうか??

閲覧数:
100,614
回答数:
5

違反報告

ベストアンサーに選ばれた回答

編集あり2010/10/1723:43:43

まずは、以下を5回、読んでみてください。

--------

インスタンス…クラスの実体(new Hoge()自体)
オブジェクト…インスタンスやクラスの総称
クラス…オブジェクトを表現したもの

--------


判りやすく行きます。

この世界は、全てオブジェクトで出来ています。
貴方も、私も、パソコンもキーボードも、本も、全てオブジェクトです。

オブジェクトは沢山ありますが、その中でも、いろんな種類のオブジェクトがありますね。
人間と言うオブジェクトや、本というオブジェクト。
人間と本は同じくオブジェクトですが、
人間と本は違うものですね。

さて、では人間とはどういうものでしょうか。
本とは、どういうものでしょうか。
それを表現したものが、クラスです。

人間には目があり、鼻があり、口がある。
話す事ができるし、無意識に心臓を動かす事ができる。

さて、こんなふうに人間と言うクラスを定義したとします。(人間がどういうものか、を表したクラスを作成した)
私は、人間クラスの実体です。なので、私はインスタンス(new 人間())です。
私はオブジェクトであり、且つ人間クラスのインスタンスです。
貴方も、人間クラスのインスタンスです。

インスタンスは、ひとつとして同じものがありません。
例えば、書店に打っている本はインスタンスです。
同じ題名の、同じ本だとしても、一つ一つ少しずつ違います。

なので、new 本()すると、一つ一つ別の本として捕らえられます。

変数については
http://www.javaroad.jp/java_variable.htm
http://www.javaroad.jp/java_variable2.htm
http://www.javaroad.jp/java_class14.htm
ここを熟読する事。
一行でも判らないことがあってはいけません。
※でも、URL一番最後にある「String s = new("Hello");」は間違いなので「String s = new String("Hello");」になおしてよんでね


操作については、まずはココを抑えてからにしましょうか。


■補足への回答:
----------
・クラス・・仕様書。必要な変数とメソッドという内容を記載してある
・インスタンス・・クラスをもとにnewして実体になったもので、実際の操作が可能
----------
←ここまで、OKです
が!

----------
・オブジェクト・・オブジェクトはすべてを網羅している型であるから、
すべての変数とメソッドの要素を含んでいる。なので、インスタンスとクラスの総称と言っても違いはない
----------
「すべての変数とメソッドの要素を含んでいる」
というのがちょっと引っかかりますが、概ねOKです。

「この世の中は全てオブジェクトでできている」がすっと理解できればOKです。


次に体得するべきは
・操作とは何か?
・インタフェースとは何か?

かもしれませんね。
お勉強頑張ってくださいね。



ということでよろしいでしょうか??

質問した人からのコメント

2010/10/19 20:52:51

降参 本当にみなさんありがとうございました!
私の質問にお応えしていただいた皆さんにとても感謝しています!
BAだけではなく全部の回答があったからだいたい理解できました★
オブジェクトのみちょっと理解に苦しんでます^皿^

今回は、とても明瞭な回答だったので、maria_salon1984さんを
選ばせていただきました☆

本当にみなさんありがとうございましたッ!!

「オブジェクトとインスタンスの違い」の検索結果

検索結果をもっと見る

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

khurataさん

編集あり2010/10/1804:35:52

すでにいくつか回答が書かれている通り、インスタンスに関しては質問者様の解釈は逆です。

コンピュータは、「メモリ上の値」以外のものに対して、操作も参照も実行もする事が出来ません。
コンピュータが何かする、というのは、メモリに対して何かする、という事なのです。
インスタンス化(実体化)というのは、クラスという設計図に従って、「コンピュータが何か出来るような値をメモリ上に作る」ことを言っています。

つまり、Java の new は、指定されたクラスに従って、インスタンスをメモリに展開する働きをしているのです。

クラスは、Java ソースプログラム上で、人間が考えるためのオブジェクトであり、
インスタンスは、プログラム実行時のメモリ上で、コンピュータが何かをするためのオブジェクトです。
そう捉えると、人間が考えるモノの多くは、「オブジェクト」としてコンピュータで扱えるはずではないか、というのが、オブジェクト指向という考え方です。

ちなみに、int 型整数などの「基本型の変数」もオブジェクトですが、これらは Java ではクラスを書く必要がないオブジェクトです。
これらは、new でインスタンス化しなくても、「メモリ上の値」として、コンピュータが扱う事が出来ます。
こうした基本型の変数は、「基本型(というクラス)に従って、コンパイラがインスタンス化している」と言えます。

なお、インスタンスについては、似た質問が他にもありましたので、ご参考になさってください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1047867000

---補足について---
クラスとインスタンスについては、質問者様が書かれた補足の通りで良いと思います。

オブジェクトは、難しいですよね・・・「インスタンスとクラスの総称」と言うよりも、
「クラスとかインスタンスという考え方でプログラミングするのがオブジェクト指向」という方法論であり、
「クラスもインスタンスも、それぞれオブジェクトである」と考えるべきかと思います。私も万全の自信はありませんが(汗)。

オブジェクトとは、物体とか、モノ、と訳される言葉ですが、オブジェクト指向の「オブジェクト」とは、
「独立した機能体」
というイメージで捉えるのが良いかと思います。
オブジェクトは、他のオブジェクトと部分的に混じったりする事は無く、オブジェクト間で何かをやりとりする時も、相手オブジェクトに侵入したり浸食したりする事がありません。

オブジェクト指向が無かった頃のプログラミングでは、メモリの上は「フリーダム」であり、誰がどんなアクセスをして書き換えているか、その管理は大変だったのです。
だから、バグが起きるのはほとんど必然でした。

オブジェクト指向では、全てのプログラムを「オブジェクト(の組み合わせ)」として作ります。
オブジェクトは互いに独立していますから、あるオブジェクトの持つメモリが、他のオブジェクトによって勝手に浸食されたりする事はありません。
そして、そういうプログラムを、Java なり C++ なりのプログラミング言語で書き表した時、それぞれのオブジェクトを「クラス」という書き方で表現しますよ、と決めたのです。

ソースコードに書かれたクラスは、コンパイルされて実行されます。
この時、クラスをもとにして作られたメモリ上のオブジェクトのことを、インスタンスと呼んでいるのです。

つまり、クラスもインスタンスも、どちらもオブジェクトなのです。

hekigyoku2さん

2010/10/1511:21:34

いろんな方が既に解答しており、追加することもないと思いましたが少し言い方を変えてみます。

Object : 全てのものはObjectです。これは、あらゆるClassがjava.lang.Objectを継承している事から明らかです。
ClassもInstanceもなにもかもがオブジェクトです。これが基本です。
Javaでは、primitive型以外は全てがObjectです。
(本当は、primitiveを含めて全てがObjectであるべきだと、OO主義者は考えます。全てがオブジェクトである。これがOOの基本です。)

Class: 型であり、Objectの製造基盤でもあります。ClassからObjectを製造することを、インスタンス化といいます。
Instance: Classから製造されたObjectです。Aクラスのインスタンス、という言い方をします。

オブジェクト~インスタンスは似ていますが、違います。
インスタンスはあくまでClassから作られたものですが、全てのオブジェクトがClassから作られるわけではありません。

これは断言していいか分からないのですが、
「オブジェクト」は概念的な存在であり、「インスタンス」は実装的な存在だと思います。

2010/10/1500:46:44

・ クラスは概念
・ オブジェクトはクラスを具象化したモノ
・ インスタンスはクラスを実体化したモノ
・ インスタンス化はクラスを実体化させるコト

オブジェクトとインスタンスは、直接は結びつかない

rst_rerereさん

編集あり2010/10/1420:42:59

色々間違ってる部分もあるけど…
ぶっちゃけ根本的に逆。
だから、オブジェクト化じゃなくてインスタンス化で正解になる。

あと、基本型と参照型の理解が追い付いてない様子。本当はそっちを先に理解するべき。
だから、「変数のことであり、それは値そのものが入っている場合と、参照型のものがあり」
って部分が完全にダウト(「変数」の説明としては良いけど、インスタンスorオブジェクトの概念はそれとは別世界であることを何より最初に理解しないとダメ)

変数には基本型(値そのものが入っている場合)と参照型(メモリー上の参照位置(アドレス)が入っている場合)があり、オブジェクトだとかインスタンスだとか呼んでるものを変数として扱う際は全て参照型になる。
基本型はあくまで「値」が入っているだけで、オブジェクトとかインスタンスとかとは無関係です。

なんか、どれだけ突っ込めばいいか分からなくなってきた…w

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。