オブジェクト指向プログラミングでインスタンスとオブジェクトって言葉が出てくるよな。同じという話もあれば、違うという話もある。実際、オブジェクトとインスタンスは何が違うのか、オブジェクト指向プログラミングでよく出てくるクラスとはどういう関係なのかをプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

インスタンスとオブジェクトの違いは?

image by iStockphoto

「インスタンス」と「オブジェクト」は、どちらもオブジェクト指向プログラミング(略してOOP)で出てくる言葉で、「クラス」と一緒に使われることが多いです。ざっくり言えば「クラス」を元に実体化したものを「インスタンス」や「オブジェクト」と呼びます。では「インスタンス」とも「オブジェクト」とも呼ぶのであれば、これらは同じものなのでしょうか?

実はそうではありません。それを見ていきましょう。

インスタンス:クラスを実体化したもの

「インスタンス(Instance)」を英和辞書で引くと「実例、事例」という訳語が出てきます。インスタンスとはクラスを実体化したものです。プログラミングする際に、まとめて考えた方が良いものを集めたものがクラスになります。例えば学生のデータをまとめたものを学生クラス、成績をまとめたものが成績クラスです。

これらのクラスの中には実際にデータが入っているわけではありません。設計図や型紙のようなものだとイメージしてください。設計図や型紙をもとに実際にデータを入れるものを作ることを「インスタンス化」と呼び、作ったものがインスタンスとなります。プラモデルに例えると、パーツ表や組み立て方を書いた紙がクラス、実際に組み立てたものがインスタンスと考えてください。

オブジェクト:すべての総称

OOPの考え方ではすべてのものが「オブジェクト」である、としています。データを入れる変数も、その変数を使って何かの処理をする関数も、それらを集めたクラスも、すべてオブジェクトである、という考え方です。

OOP以前のプログラミング言語では変数は変数、関数は関数と違うものと考えていました。それをOOPではすべてオブジェクトと考えるのです。そのオブジェクト同士が連携してプログラムが動作するというのがOOPの考え方になります。

オブジェクト指向はすべてオブジェクトという考え方

image by iStockphoto

オブジェクト指向プログラミング(OOP)とは何でしょうか。ざっくりと言うと、プログラムで使う変数も関数も、その他のものもすべて「オブジェクト」である、という考え方です。では「オブジェクト」とは何なのでしょうか。そのまま直訳すると「もの」となります。

例えば、人間も犬も猫も猿もみな動物です。それと同じようにプログラムの中にある変数や関数、あるいはクラスといったものも違うように見えてすべて同じ「もの」であるという考え方になります。何だか曖昧でよくわかりませんよね。もう少し詳しく見ていきます。

\次のページで「プログラムはすべてオブジェクト?」を解説!/

プログラムはすべてオブジェクト?

例えば、犬も猫も動物ですが、共通点は何でしょう。色々ありますが、足が4本あり、毛に覆われています。また、卵ではなく赤ちゃんで産まれて育ちますね。もちろん、相違点も色々ありますが、同じ特徴を持ったものを共通点でくくってまとめると考えやすくなります

プログラムの場合も、同じ特徴のあるものをまとめて考えると考えやすいのです。OOP以前のプログラミング言語では、この変数とこの変数は同じ分類、あるいは、このデータを処理するのはこの関数という関連性は人間が判断しました。

しかし、OOPではそれらの関連性をオブジェクトというくくりでまとめることでわかりやすくなります。人間にわかりやすいだけでなく、コンピュータにも関連がわかるため、関連のないものを組み合わせて使おうとするとエラーになるのです。

クラスは型紙

関連をまとめたものが「オブジェクト」です。オブジェクトはデータ(プロパティやフィールド)と、そのデータを処理する関数(メソッド)を持ちます。オブジェクトの中でもデータだけのものが変数、メソッドだけのものが関数と考えると、プログラムはすべてオブジェクトである、という考え方も少しわかりやすくなるのではないでしょうか。

このオブジェクトの「これをまとめました」という設計図や型紙に当たるものが「クラス」です。

例えば、学生の成績クラスというものを考えます。生徒の名前、各教科の点数がデートして必要です。また、その全教科合計点や平均点を計算する関数も必要ですね。あるオブジェクトがこういうプロパティやメソッドを持ちます、というのを書いたものが「クラス」になります。

インスタンスは型紙から作った服

クラスはただの型紙です。実際に値を入れる変数や呼び出す関数の中身が必要。その型紙から服を作ることに相当することを「クラスをオブジェクト化する」や「クラスをインスタンス化する」と呼びます。また、そうして実際にできた服のことを「オブジェクト」や「インスタンス」と呼ぶのです。

パソコンやスマホで使うアプリは、どこかからダウンロードしてインストールしないと使えないですよね。同じようにクラスもそれだけではアプリストアに並んでいる状態なので、インストールして使える状態にします。インストールすることが「インスタンス化」で、手元にあるアプリが「インスタンス」と考えてください。

プログラミング言語によって異なるオブジェクト指向

image by iStockphoto

ざっくりとオブジェクトとクラス、インスタンスについて説明してきました。ここではもう少しこれらの言葉の意味を探っていきます。そうすることで「オブジェクト」と「インスタンス」の違いを探っていきましょう。

インスタンスはオブジェクトである

まず「インスタンス」は「オブジェクト」なのか、それとも違うのかです。クラスもインスタンスもすべては「オブジェクト」と説明しました。そのため、「インスタンス」も「オブジェクト」です。これは、「猫」も「犬」も「動物」であるというのと同じですね。

\次のページで「オブジェクトはインスタンス?」を解説!/

オブジェクトはインスタンス?

では「オブジェクト」は「インスタンス」なのでしょうか。インスタンスはオブジェクトですが、インスタンスだけがオブジェクトではありません。例えば、クラスもオブジェクトです。つまり、「オブジェクト」は必ずしも「インスタンス」ではありません

「オブジェクト」のややこしいところは「すべてはオブジェクトである」という総称としての「オブジェクト」と、実体の「オブジェクト(=インスタンス)」のどちらも「オブジェクト」と呼ぶことです。そこで「オブジェクト」と「インスタンス」は同じなのか違うのかや、どう違うのかが曖昧になっています。文脈でどちらの意味なのかを判断して使いましょう。

完全なオブジェクト指向言語ってなに?

オブジェクト指向の考え方を取り入れた言語をオブジェクト指向プログラミング言語と呼びます。いくつもありますが、C++やJava、Pythonなどが有名です。そのいくつもあるオブジェクト指向プログラミング言語でもオブジェクト指向の考え方は様々

「すべてがオブジェクト」と説明しましたが、実際にはすべてがオブジェクトではないオブジェクト指向言語もあります。例えば、C++やJavaというプログラミング言語では整数や小数を表す変数はオブジェクトではありません。すべてがオブジェクトという言語を完全なオブジェクト指向言語と呼ぶことも。

またクラスという型紙から作った服がインスタンスと説明しましたが、「クラス」がないオブジェクト指向言語もあります。クラスがないオブジェクト指向言語ではオブジェクト=インスタンスという考え方。実際の細かい点はそれぞれのプログラミング言語の考え方を確認してください。

クラスは型紙、インスタンスは型紙で作った服、オブジェクトはそれらすべて

オブジェクト指向プログラミングでは全てをオブジェクトであると考えます。そのオブジェクトはデータ(プロパティ)とそのデータを処理する関数(メソッド)から成るのです。その設計図や型紙がクラス。そのクラスから実体を作ったものがインスタンス。インスタンスもクラスもオブジェクトの一種です。インスタンスとオブジェクトを同じように捉える考え方もあります。ややこしくなるため、クラスを実体化したものがインスタンス、それらを合わせてオブジェクトと覚えておくことがおすすめです。

いずれにしろ、プログラミング言語にとってオブジェクト指向の細かい考え方は異なります。ここでは一般論を説明しましたが、プログラミング言語毎の決まりはそれぞれ確認してください。

" /> インスタンスとオブジェクトの違いとは?クラスとの関係は?違いや注意点もプログラマーがわかりやすく解説 – Study-Z
IT・プログラミング雑学

インスタンスとオブジェクトの違いとは?クラスとの関係は?違いや注意点もプログラマーがわかりやすく解説

オブジェクト指向プログラミングでインスタンスとオブジェクトって言葉が出てくるよな。同じという話もあれば、違うという話もある。実際、オブジェクトとインスタンスは何が違うのか、オブジェクト指向プログラミングでよく出てくるクラスとはどういう関係なのかをプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

インスタンスとオブジェクトの違いは?

image by iStockphoto

「インスタンス」と「オブジェクト」は、どちらもオブジェクト指向プログラミング(略してOOP)で出てくる言葉で、「クラス」と一緒に使われることが多いです。ざっくり言えば「クラス」を元に実体化したものを「インスタンス」や「オブジェクト」と呼びます。では「インスタンス」とも「オブジェクト」とも呼ぶのであれば、これらは同じものなのでしょうか?

実はそうではありません。それを見ていきましょう。

インスタンス:クラスを実体化したもの

「インスタンス(Instance)」を英和辞書で引くと「実例、事例」という訳語が出てきます。インスタンスとはクラスを実体化したものです。プログラミングする際に、まとめて考えた方が良いものを集めたものがクラスになります。例えば学生のデータをまとめたものを学生クラス、成績をまとめたものが成績クラスです。

これらのクラスの中には実際にデータが入っているわけではありません。設計図や型紙のようなものだとイメージしてください。設計図や型紙をもとに実際にデータを入れるものを作ることを「インスタンス化」と呼び、作ったものがインスタンスとなります。プラモデルに例えると、パーツ表や組み立て方を書いた紙がクラス、実際に組み立てたものがインスタンスと考えてください。

オブジェクト:すべての総称

OOPの考え方ではすべてのものが「オブジェクト」である、としています。データを入れる変数も、その変数を使って何かの処理をする関数も、それらを集めたクラスも、すべてオブジェクトである、という考え方です。

OOP以前のプログラミング言語では変数は変数、関数は関数と違うものと考えていました。それをOOPではすべてオブジェクトと考えるのです。そのオブジェクト同士が連携してプログラムが動作するというのがOOPの考え方になります。

オブジェクト指向はすべてオブジェクトという考え方

image by iStockphoto

オブジェクト指向プログラミング(OOP)とは何でしょうか。ざっくりと言うと、プログラムで使う変数も関数も、その他のものもすべて「オブジェクト」である、という考え方です。では「オブジェクト」とは何なのでしょうか。そのまま直訳すると「もの」となります。

例えば、人間も犬も猫も猿もみな動物です。それと同じようにプログラムの中にある変数や関数、あるいはクラスといったものも違うように見えてすべて同じ「もの」であるという考え方になります。何だか曖昧でよくわかりませんよね。もう少し詳しく見ていきます。

\次のページで「プログラムはすべてオブジェクト?」を解説!/

次のページを読む
1 2 3
Share: