違いを解説君

あるゆる物事の"違い"をわかりやすく解説する情報マガジン

プログラミング

違い

オブジェクトとインスタンスの違いをわかりやすく解説【PG言語】

投稿日:

オブジェクト、インスタンスって……javaで使うやつ?

プログラミングで使う何かだよね?

そう、プログラミング言語のひとつである、javaで使うやつです。

人がコンピュータと会話をする時に必要になるのが、プログラミング言語。

犬語もサメ語も話すことができないわたしたち。

ですが、プログラミング言語を使えばコンピュータとは意思を通わせることが可能なのです。

 

プログラミング言語は、複雑で難しいのですが、犬やサメと話すよりは簡単。

理解が完璧でなくても、プログラムは何とかなっちゃうものなのです。

参考書や解説書などによっても、異なる解説があったりする、『オブジェクト』『インスタンス』というふたつの単語。

それぞれの違いや関わりなどが分かれば、その言葉を使った説明が腑に落ちるでしょう。

そこで、微力ではありますが、この記事で『オブジェクト』『インスタンス』の違いをわかりやすく解説していきます。

スポンサーリンク

オブジェクトとインスタンス、どこが違うの?

【 Theme 1-2 料理で覚えるオブジェクト指向 Part.01】

『オブジェクト』とは、すべての『モノ』。

Javaプログラム的に表現すると、世界はすべて『オブジェクト』で構成されています。

『インスタンス』は、同一のグループに所属するオブジェクトの特徴を具体的に表しています。

『具体的な要素を持ったオブジェクトを指すのがインスタンス』

ということです。

 

『オブジェクト指向』という言葉があります。

これはオブジェクト同士が手を組んで、一緒に巨大なシステムやライブラリを構築していく、といった考え方・方法です。

『多様なオブジェクト=モノが集まり、ひとつの世界ができあがる』

というわけです。

ここは現実世界と同じですね。

 

そこで重要になるのが『オブジェクト』と『インスタンス』。

簡単に言いますと、

「オブジェクトが設計図を与えられると、インスタンスにもなる」

……何の呪文でしょうか……。

 

では、こう言いかえてみます。

よし子ちゃんは小学校1年生で身長は120㎝。

かけっこの速いおかっぱの女の子です。

あ! よし子ちゃ~ん!(と、走り去るよし子ちゃんに手を振る)

『よし子ちゃん』はオブジェクトです。

  • 小学校一年生
  • 120cm
  • かけっこが速い
  • おかっぱの女の子

が、よし子ちゃんの設計図(クラスといいます)。

この設計図を与えられた具体的な実体が『走り去るよし子ちゃん』。

インスタンスになったオブジェクトなわけです。

……すいません、ものすごく雑に言いました。

 

違いと関係性をざっと言えばこんな感じ、と今のところは思っておいてください。

続いて、それぞれの特徴や詳しい関係を見ていきます。

 

オブジェクトとは?

オブジェクトとは『モノ』と先ほど書きましたが、インスタンスをそう呼ぶこともあります。

『オブジェクト』を、その言葉通りに日本語に訳すと『もの・対象・目的』となります。

オブジェクト指向では、見てさわれる物理的なモノも、見たりさわったりできない抽象的なモノも、すべてが『オブジェクト』です。

 

これが、そのままでは話が終わってしまいます。

料理なら、ただの『料理』というコトバ、漠然とした概念止まりです。

単なる料理を

『高級料亭で食べた、値段も味も最高の料理』

にするには、『認識する主体』が必要となります。

何を『目的』として認識しているか?ということですね。

対象をどんな『視点』から見るかによって、違いが生じてくるからです。

料理人ならば、その料理を『味』『盛り付け』といった視点から見るでしょう。

カメラマンなら『被写体としての見栄えや色彩』などに注意を向ける。

お客さんの立場なら『味と値段の釣り合い』でしょうか。

花ならば単なる『花』ではなく、『自分の育てている朝顔』。

人であれば『わたしのお母さん』『学校の友達』など、具体的な存在ですね。

自分との具体的な関わりを持つものが、オブジェクトとされるのです。

 

インスタンスとは?オブジェクトとはこんな関係!

さて、ここで『インスタンス』の登場です。

実は『焼き物』であるホッケや鶏肉のソテーは、『焼き物』カテゴリーのオブジェクトであると同時に、インスタンスでもあるのです。

 

『インスタンス』とは『例』という意味です。

『例えば』を英語で言えば『for example』ですが、『for instance』も同じ意味になります。

『焼き物』カテゴリーは、焼き物という設計図を持ったオブジェクトが集まったもの。

その集合の要素を持つ『オブジェクト』が『インスタンス』なのです。

 

……はぁ?

 

大丈夫、今から説明しますので、ついてきてください!

この話の隠しテーマが『プログラミング言語』であった、ということを思い出して下さい。

つまり『プログラミング』がしたい、ということがオブジェクトとインスタンスの違いを知る目的なのです。

設計図があり、いくつもの『オブジェクト』も存在しています。

あと、プログラミングのために足りないのは?

『実体化』です。

『実体化』が成されなければ、「このプログラムはこんな感じです」で終わりです。

今あるのは企画書だけ。

『オブジェクト指向』でのオブジェクトとは、そのプログラム上で実現したい概念を「コレ!」といって提示したものではありません。

類似点などで連想させ、表現しているのです。

 

ここでまた、よし子ちゃんに登場してもらいましょう。

よし子ちゃんは『一年生』の設計図を与えられた『オブジェクト』でしたね。

それだけでは、漠然としています。

大勢いる一年生の中のいったいどの子なのか、特定できません。

 

そこで『インスタンス』の出番です!

「身長120㎝でおかっぱ、足も速いの! 今、走ってった女の子だよ!」

 

ここが『インスタンス』――よし子ちゃんの要素です。

これらの情報がただの『オブジェクト』だった、よし子ちゃんを、実体をもった、たったひとりの『よし子ちゃん』にしたのです。

プログラム上の数々のデータが実行され、実体を持ったオブジェクトとなる。

それは『インスタンス』と呼ばれるオブジェクトに変化した、ということなのです。

 

設計だけでは『オブジェクト』、実体となれば『インスタンス』です。

インスタンスには同一のものは存在しません。

同じ『指輪』という設計図を持つオブジェクトでも、恋人への贈り物として買えば『婚約指輪』になる。

ただのオブジェクトにしないためには、『恋人への婚約指輪』としてあなたが購入しなければなりません。

そうすれば単なる指輪でも婚約指輪でもない、『あなたが恋人のために買った婚約指輪』というインスタンスを持つオブジェクトになるのです。

『インスタンスを生成するためのプロセス』という、この行動のことを、プログラミング上では『インスタンス化』といいます。

 

オブジェクトとインスタンスの違いや関係まとめ

プログラマー

オブジェクト指向では、様々な情報をデータ同士でやり取りしています。

オブジェクトとは、その際の変数、または配列、関数でもあります。

それらの対象、受け取ることのできる実体もまた『オブジェクト』と呼ばれています。

 

ひとつのテーマでつながっている、データと処理の集まりのようなもの。

オブジェクトには『自身に対する振る舞い』という、自らに働きかける機能もあります。

プログラムですら、『オブジェクト』。

ここはおおざっぱに考えてもらってOK。

大きなくくりで考えれば、インスタンスも『オブジェクト』になるわけです。

このことを踏まえ、『インスタンス』の『オブジェクト』に対する働きや、双方の違いなどをもう一度見て行きましょう。

設計図(クラス)はオブジェクトに何をする?

今回は『オブジェクトとインスタンスの違い』がテーマなので『クラス』についての詳しい説明は省いて来ました。

ですが、オブジェクトとインスタンスを説明するためには、どうしても不可欠な存在なので、ここでちょっとだけお話しします。

クラスとは、

  • 同じ特徴を持つ『オブジェクト』の名前を表します。
  • オブジェクトの振る舞いを定義します。
  • 設計図の役割をしています。

クラスがなければ、オブジェクトは実体を持てず、インスタンスが生まれません。

設計図(クラス)の指示を受けたオブジェクトはどうなる?

『オブジェクトの実装』に入ります。

⇒実体を持ったオブジェクトは『インスタンス』と呼ばれます。

 

そこがどうにも分かり辛いんです!

 

はい、説明します!

本来オブジェクトは、インスタンスを作る手続きを持っています。

けれど単に持っているだけなので、これを実行するためには設計図が必要になるわけです。

ですが、それだけでも実行はできません。

『オブジェクト指向』の出番です。

関数もデータも、すべてがオブジェクト。

オブジェクト間のやり取りを可能にするのが『オブジェクト指向』というものでしたね。

プログラムは設計図の定義にのっとり、動き始めるのです。

こうして設計図に沿ってインスタンスを作成する情報がやり取りされます。

単なるひな型(もしくはクッキー型)に生きたデータ(クッキー)が与えられて、実体を持つ。

これがオブジェクトのインスタンス化、つまり『インスタンス』なのです。

ポイントをまとめてみましょう!

オブジェクト

何もかもが『オブジェクト』なのですが、ここではインスタンスとの違いをあげていきます。

  • 明確な目的のある視点で認識しなければならない。
  • 自らインスタンスを作成するデータや振る舞いを持っている。
  • オブジェクトは設計段階での用語⇒実装段階ではインスタンス。

インスタンス

  • しばしばオブジェクトと同じ意味で使われる。
  • 設計図があって、インスタンスになる⇒設計図を与えられたオブジェクトがインスタンス。
  • インスタンスは実装レベルでの用語⇒設計レベルで使うならオブジェクト。
  • メモリ上に現れたオブジェクトが、インスタンスと呼ばれる。

スポンサーリンク

おわりに

プログラミングは、本当に大変です。

共通言語が、英語と数字とくれば、この時点でもう

「共通ってなに?」

と思ってしまうことでしょう。

 

ですが、法則さえ覚えてしまえば、コンピュータとの会話も成立します。

となれば『サメ語』の修得よりカンタン……。

本当でしょうか?

 

今回説明したのは、あくまで『オブジェクト、インスタンスの違いについて』のみです。

ここをスタート地点として、プログラミング理論を修得していくことになるのです。

先は長いのですが、ぜひ頑張ってみてくださいね!

関連記事

-違い

Copyright© 違いを解説君 , 2019 All Rights Reserved.