クラスとオブジェクトとインスタンス

考えてみる。

まず、それぞれを日本語に直訳すると

  • クラス: 種類、分類
  • オブジェクト: 物、物体
  • インスタンス: 事実、事例

オブジェクト指向とはオブジェクト同士でメッセージのやりとりをするモデルのこと。そのモデルを実現する為の言語がオブジェクト指向言語

  • クラスとは、同じ性質を持ったオブジェクトを分類してまとめたもの。
  • その分類された性質をクラスとして定義する。
  • インスタンスとはそのクラスを実体化したもの(クラスの事例)。
  • 基本的にオブジェクト == インスタンスと思っていい。


だから(接続詞がおかしいな。。)

  • クラスから作られたオブジェクトがインスタンス
  • オブジェクトはクラスが存在しなくても存在できる。
  • クラス指向でないオブジェクト指向ではクラスという概念なしでオブジェクトを表現できる。


もっと実装よりの考えかたをすると、

  • オブジェクトは属性と操作を持つ。
  • クラスはオブジェクトが持つ属性と操作を定義する。
  • インスタンスはクラスへの参照と属性を持ち、自分自身を引数にクラスのメソッドを呼び出す。

やっぱし、クラスとインスタンスという概念は

クラスを使ってオブジェクト指向を表現する為のもの

と考えるのがいいのかな。


うまくまとまらない。。。

追記

あー、分類(クラス)を意識しないでそれ単体の「もの」として見るときはオブジェクトと呼んで、「何それに属する」という言い方をする場合はインスタンスと呼んでるかな。
どこかに書いてあった気もするけど。