はじめに
オブジェクト指向を学び始めると、「クラス」と「オブジェクト」という言葉がほぼ同時に登場します。どちらも似たものに見えますが、役割は同じではありません。
クラスを使うオブジェクト指向では、クラスは複数のオブジェクトに共通する情報や処理をまとめた定義で、オブジェクトはその定義をもとに作られた個別の実体です。この記事では、クラスとオブジェクトの違い、状態と振る舞い、インスタンスという言葉の関係を整理し、1つのクラスから複数のオブジェクトを作る考え方を解説します。
クラスとオブジェクトとは
クラスを使うオブジェクト指向では、同じ種類のものに共通する情報や処理をクラスとして定義し、その定義をもとに個別のオブジェクトを作ります。
例えば「商品」というクラスを考えると、商品名や価格のような情報と、価格を変更するなどの処理を共通の定義としてまとめられます。そこから「りんご」「みかん」といった別々の商品オブジェクトを作れば、同じ定義を使いながら、それぞれ異なる商品名や価格を持たせられます。
クラスとオブジェクトの違い
| 項目 | クラス | オブジェクト |
|---|---|---|
| 役割 | 共通する情報や処理を定義する | 定義をもとに作られた個別の実体 |
| 持つ内容 | どのような状態や振る舞いを持つかという共通の定義 | 実際の値を持つ個別の状態 |
| 例 | 商品という種類の定義 | りんご、みかんという個々の商品 |
クラスは「何を持ち、何ができるものか」を共通化する側、オブジェクトはその共通定義に具体的な値を持たせて扱う側と考えると整理しやすくなります。
この分け方によって、共通ルールをクラス側へ集めつつ、実際に扱うデータはオブジェクトごとに分けて管理できます。オブジェクトが増えても、同じ種類であれば共通の定義を繰り返し用意する必要がありません。

クラスは共通の定義をまとめる
同じ種類のデータや処理を個別にばらばらと用意すると、同じルールを何度も書くことになります。クラスを使うと、その種類に共通する情報や処理を1か所の定義としてまとめられます。
商品なら「名前を持つ」「価格を持つ」「価格を変更できる」といった共通点を定義できます。クラスは特定の1商品そのものではなく、同じ種類のオブジェクトがどのような情報と処理を持つかを表します。
オブジェクトは個別の状態を持つ
オブジェクトは、クラスの定義をもとに作られた個別の実体です。同じ商品クラスから作られていても、「りんごは120円」「みかんは150円」のように、それぞれ別の値を持てます。
クラスをもとにオブジェクトを作ることをインスタンス化と呼び、作られたオブジェクトをインスタンスと呼ぶことがあります。初学者の段階では、クラスが共通の定義、インスタンスがそこから作られた個別のもの、と捉えると理解しやすくなります。
例えば、同じ商品クラスから作った2つのオブジェクトは、どちらも商品名と価格を持つという形は共通していますが、実際の商品名や価格は別々です。共通する「形」と個別の「値」を分けて考えられることが、クラスとオブジェクトを分ける大きな利点です。
状態と振る舞いをまとめて考える
オブジェクトは、現在どのような値を持っているかという「状態」と、そのオブジェクトが行える処理である「振る舞い」を組み合わせて考えます。
例えば商品オブジェクトなら、商品名や価格が状態に当たり、価格を変更する処理などが振る舞いに当たります。関連する状態と振る舞いを同じ対象としてまとめることで、プログラム内の役割を整理しやすくなります。
1つのクラスから複数のオブジェクトを作る
クラスの重要な点は、同じ定義を使って複数のオブジェクトを作れることです。商品クラスから「りんご」「みかん」「バナナ」を作れば、3つとも同じ種類の情報や処理を持ちながら、商品名や価格などの状態は個別に管理できます。
つまり、クラスで共通する仕組みを定義し、オブジェクトごとに異なる状態を持たせることで、共通部分をまとめながら個別のものを扱えます。クラスとオブジェクトの関係は、この「共通の定義」と「個別の実体」の組み合わせとして理解するのが基本です。
関数や継承との関係
クラスの中に処理をまとめる考え方を理解するには、先にプログラミングの関数の基本を押さえておくと整理しやすくなります。
また、複数のクラスに共通する性質を別のクラスから受け継ぐ考え方が継承です。クラスとオブジェクトの基本を理解した後は、継承とは何かを確認すると、クラス同士の関係へ理解を広げられます。
まとめ
クラスを使うオブジェクト指向では、クラスは同じ種類のオブジェクトに共通する情報や処理をまとめた定義です。オブジェクトは、そのクラスをもとに作られ、それぞれ個別の状態を持つ実体です。
クラスで共通部分を定義し、そこから複数のオブジェクトを作ることで、同じ仕組みを使いながら個別のデータを扱えます。「クラス=共通の定義」「オブジェクト=そこから作られた個別の実体」という関係を押さえることが、クラスを使うオブジェクト指向の基礎になります。