プログラミングには必ずクラス、インスタンス、オブジェクトというキーワードが登場します。
これらは重要な概念でありながら、初学者にとっては分かり難いものです。
ここでは、クラス、インスタンス、オブジェクトの意味と関係について、 ややこしいプログラムのサンプル抜きで概念だけを説明してみました。
クラスは設計図のこと
クラスというのはオブジェクト指向特有の考え方です。
オブジェクト指向についてはこちらに考え方を解説しています。
さて、クラス、インスタンス、オブジェクトを理解する上で前提条件があります。
- コンピュータに処理を行わせるには、必ずメモリ上にプログラムとデータを置く必要がある
ということです。
これを前提に話を進めていきますね。
この前提からすると、プログラムを実行した時点で、必要なプログラムとデータがメモリに置かれていることになります。
確かにその通りです。
では、プログラムコードの中にクラスも書いているんだから、この時点でクラスの中に記述しているデータ(プロパティ)や処理プログラム(メソッド)もメモリ上に置かれているんだよね?
と考えてしまいそうですが、そうではありません。
クラスは特殊な存在で、実はこの時点ではメモリ上に置かれていません。
クラスはプロパティとメソッドを定義した設計図だと考えてもらえれば理解しやすいでしょう。
クラスを実際に使う際、設計図に沿ってプロパティとメソッドをメモリ上に置く必要があります。
そして、そのためのステートメント(命令文)が用意されています。
JavaやC#の場合、new というステートメントを使います。
設計図から作ったものがインスタンス
戦車を例にすると、戦車の設計図があって、必要な時に設計図から戦車を作るわけですが、この設計図がクラスに相当し、new を使ってメモリ上に置かれたクラス(プロパティやメソッド)が戦車になります。
この出来上がった戦車に相当する、メモリ上に置かれたクラスのことを「インスタンス」と呼んでいます。
インスタンスとオブジェクトの意味は同じ
実は、インスタンスとオブジェクトは同じ意味です。
では、なぜ2つの呼び方があるのか?
「インスタンス」は、オブジェクト指向特有の呼び方で、オブジェクト指向の登場と共に現れました。
それに対して「オブジェクト」は、オブジェクト指向が登場する以前から存在しており、プログラミング以外でも使われています。
例えば、CADなどで作った図形や、画面に配置されたボタンなどもオブジェクトと呼んだりします。
つまり昔からあった呼び方か、オブジェクト指向で登場した呼び方かの違いだけです。
まとめ
- クラスはインスタンスを作るための設計図
- クラスに記述したメソッドやプロパティが、実際のメモリ上に置かれたものをインスタンスと呼ぶ
- インスタンスはオブジェクト指向特有の呼び方で オブジェクトとインスタンスの意味は同じ
ということです。