###1.はじめに
クラス、オブジェクト、インスタンスの違いについての理解があやふやなままであったので、私なりにまとめてみました。
(言語によって、多少意味が違ってくる場合もあります。本記事ではPHP,Javaを想定しております。)
###2.要約
最初にかなり簡単な要約を下記に示します。
オブジェクト・・・「対象となる物」。概念、抽象的なもの
クラス・・・オブジェクトの設計図。
インスタンス・・・クラス(設計図)を元に作成された(単一の)物
###3.詳細
さらに詳しくまとめてみます。
オブジェクト(object)
「object」という英単語を日本語訳すると「物」、「物体」、「目的」、「対象となる物」などと出てきますが、プログラミング用語としての「object」は最後の「対象となる物」が一番近しいと考えます。
例えば「人」や「車」などがあって、「人」は"性別"や"名前"などがあったり(ありさま、状態)、"走る"、"食べる"などの振る舞いがあります。「車」にも”車種”があったり、”ブレーキ”をする、”エンジンを起動する”などの振る舞いがあります。
これらを具的的に設計していくのがクラスの役割になります。
私はオブジェクトとオブジェクト指向を混ぜて考えていた節があるのですが、この二つは分けて考えた方が良いです。
オブジェクト指向はあくまでもプログラミングの技術手法の一つです。
詳しくはオブジェクト指向でなぜつくるのかに大変わかりやすく書かれているので是非手にとって読んでみてください。
クラス(class)
クラスはオブジェクトを具体的に使用するための設計図のような物です。
大抵のクラスにはfield,property,インスタンス変数などがあり、プログラミング内で使用する「ありさま、状態」を定義します。
「振る舞い」もクラス内で関数として定義され、オブジェクトを通して使用されます。メソッドと呼ばれたりします。
関数とメソッドの違いはこちらのstackoverflow内の説明がわかりやすかったです。
インスタンス(instance)
インスタンスはclassで設計されたオブジェクトを作成(具象化)します。
例:
「人」クラスから、"Mr.Hoge", "Ms.Fuga"といった具体的で単一のモノを作成