【完全理解①】人間=山田さん?で考えるクラスとインスタンス

オブジェクト指向を学び始めたとき、多くの人がつまずくのが

  • クラス
  • インスタンス

の違いです。

「設計図と実物」と言われても、

いまいちピンとこない人も多いでしょう。

そこで今回は、できるだけシンプルな例で考えてみます。


人間 = 山田さん?

次の式を見てください。

人間 = 山田さん

一見、間違っていないようにも思えます。

山田さんは人間です。

でも、本当に「=(イコール)」でしょうか?

もしこれが本当にイコールなら、

人間 = 佐藤さん

も成り立ちます。

すると、

山田さん = 佐藤さん

も成り立ってしまいます。

これは明らかにおかしいですね。


何が違うのでしょうか?

ポイントはここです。

  • 「人間」は種類(抽象)
  • 「山田さん」はその中の1人(具体)

つまり、

山田さんは「人間そのもの」ではありません。

正しくは、

山田さんは人間である

という関係です。

これは「同じ」という意味ではなく、

「ある種類に属している」という意味です。


抽象と具体の違い

「人間」という言葉は、とても抽象的です。

年齢も、性格も、身長も決まっていません。

しかし「山田さん」と言った瞬間、

  • 名前があり
  • 年齢があり
  • 性格があり
  • 体格がある

具体的な存在になります。

この違いが、オブジェクト指向の出発点です。


これをプログラミングで考えると?

オブジェクト指向では、この関係を次のように表現します。


抽象(種類) → クラス

class Human
{
}

これは「人間という種類」を定義しているだけです。

まだ誰も存在していません。

ここが最初の重要ポイントです。

クラスを書いただけでは、実体は存在しません。


具体(実体) → インスタンス

Human yamada = new Human();
Human sato = new Human();

ここで初めて「実体」が生まれます。

  • yamada は Human の1つ
  • sato も Human の1つ

この「実際に作られた存在」を

インスタンスと呼びます。


クラスとインスタンスを一言で言うと

  • クラス = 種類の定義
  • インスタンス = その種類から作られた個体

設計図というより、

「種類」と「個体」

と考える方が分かりやすい人も多いでしょう。


なぜここが大事なのか?

この区別が曖昧だと、

  • クラスだけで何かが動くと思ってしまう
  • new の意味が分からない
  • なぜ複数作れるのかが理解できない

といった混乱が起きます。

オブジェクト指向で苦しくなる人の多くは、

「抽象」が分からないのではなく、

抽象と具体を混同している

のです。


まとめ

  • 「人間」は抽象(クラス)
  • 「山田さん」は具体(インスタンス)
  • 同じではない
  • 属しているという関係
  • クラスを書いただけでは実体は存在しない

ここが腑に落ちれば、

オブジェクト指向の第一関門は突破しています。


📌 次回予告

では、「new」とは何をしているのでしょうか?

次回は、実際にコードを動かしながら理解します。


訪問数 13 回, 今日の訪問数 13回