クラス くらす
簡単に言うとこんな感じ!
クラスは「モノの設計図」だよ!たとえば「犬」というクラスを作れば、そこから「ポチ」「タロウ」「シロ」といった実際の犬(インスタンス)を何匹でも作れるんだ。設計図を1回書けばあとは量産できるってこと!
クラスとは
クラス(Class)とは、オブジェクト指向プログラミング(OOP)において、データ(属性)と処理(メソッド)をひとまとまりに定義した「設計図」のことです。プログラムの世界で扱うモノ・概念の構造と振る舞いをひとつの単位として記述します。
クラスそのものは設計図に過ぎず、そこからインスタンス化(実体化)することで、実際にプログラム上で動くオブジェクトが生まれます。同じクラスから複数のインスタンスを作れるため、同じ構造・ロジックを持つオブジェクトを効率よく量産できます。これがクラスの最大のメリットです。
クラスはカプセル化・継承・ポリモーフィズムというオブジェクト指向の3大原則を支える基本単位でもあります。現代のほぼすべての主要プログラミング言語(Java・Python・C#・Ruby・PHPなど)がクラスの概念を採用しており、業務システム・Webアプリ・スマホアプリ開発において欠かせない設計の土台となっています。
クラスの構造と主な構成要素
クラスは大きく「フィールド(属性)」と「メソッド(操作)」の2つで構成されます。
| 構成要素 | 別名 | 説明 | 例(犬クラス) |
|---|---|---|---|
| フィールド | プロパティ / 属性 | オブジェクトが持つデータ・状態 | 名前、年齢、犬種 |
| メソッド | 関数 / 操作 | オブジェクトが実行できる処理 | 吠える、走る、食べる |
| コンストラクタ | 初期化メソッド | インスタンス生成時に自動で呼ばれる処理 | Dog("ポチ", 3) |
| アクセス修飾子 | 可視性 | 外部からのアクセス可否を制御(public / private など) | 名前はpublic、体重はprivate |
設計図と実体のイメージ
【クラス(設計図)】 【インスタンス(実体)】
┌──────────────────┐ ┌────────────┐
│ Dog クラス │ ──→ │ ポチ(Dog) │ 名前=ポチ, 年齢=3
│ - name: String │ ├────────────┤
│ - age: Int │ ──→ │ タロウ(Dog)│ 名前=タロウ, 年齢=5
│ + bark() │ ├────────────┤
│ + run() │ ──→ │ シロ(Dog) │ 名前=シロ, 年齢=1
└──────────────────┘ └────────────┘
設計図は1枚だけ 実体は何個でも作れる
覚え方:「クラスは型抜きの型」
クイッキーな語呂合わせ:「クラス=型(かた)、インスタンス=クッキー」。型抜きの金属型(クラス)がひとつあれば、同じ形のクッキー(インスタンス)をいくつでも焼けますよね。型は壊れないし、クッキーを食べても型は残る——そのイメージです!
Pythonでの記述例
# クラスの定義(設計図を作る)
class Dog:
def __init__(self, name, age): # コンストラクタ
self.name = name # フィールド(属性)
self.age = age
def bark(self): # メソッド(操作)
print(f"{self.name}:ワン!")
# インスタンスの生成(設計図から実体を作る)
pochi = Dog("ポチ", 3)
taro = Dog("タロウ", 5)
pochi.bark() # → ポチ:ワン!
taro.bark() # → タロウ:ワン!
歴史と背景
- 1960年代 — ノルウェーで開発された Simula 67 が、クラスと継承の概念を世界で初めて導入。シミュレーション目的で設計された
- 1970年代 — ゼロックスのパロアルト研究所で Smalltalk が生まれ、「すべてはオブジェクト」という思想を徹底。クラスベースOOPの原型が確立
- 1980年代 — C++ がCにクラスを追加する形で登場。商用システムへのOOP普及が始まる
- 1991年 — Python が公開。シンプルなクラス構文でOOPの敷居を下げる
- 1995年 — Java が登場。「すべてのコードはクラスの中に書く」という徹底したクラス中心設計で、エンタープライズ開発の標準となる
- 1990年代〜2000年代 — Ruby・PHP・C#など主要言語が次々とクラス構文を採用し、Webアプリ開発の主流に
- 現在 — JavaScriptも ES2015(ES6) でclass構文が追加され、フロントエンド開発でも広く使われるように
クラスの3大原則と関連する重要概念
オブジェクト指向の「クラス」を理解するには、3つの柱を押さえることが重要です。
クラスベース vs プロトタイプベース
すべての言語がクラスベースというわけではありません。JavaScriptは元々プロトタイプベースと呼ばれる別の仕組みを使っており、ES6以降に追加されたclass構文は「糖衣構文(シンタックスシュガー)」と呼ばれる、見た目だけクラス風にしたものです。
| 方式 | 特徴 | 代表的な言語 |
|---|---|---|
| クラスベース | 設計図(クラス)からインスタンスを生成 | Java, Python, C#, Ruby |
| プロトタイプベース | 既存オブジェクトをコピー・参照して拡張 | JavaScript(内部的に) |
抽象クラスとインターフェース
| 概念 | 説明 | 用途 |
|---|---|---|
| 抽象クラス | インスタンス化できない、共通の骨格を定義するクラス | 継承元として使う |
| インターフェース | 処理の名前と引数だけを定義(実装なし) | 複数クラスへの共通の約束として使う |