オブジェクト指向プログラミング

クラス くらす

オブジェクト指向インスタンスカプセル化継承メソッドコンストラクタ
クラスについて教えて

簡単に言うとこんな感じ!

クラスは「モノの設計図」だよ!たとえば「犬」というクラスを作れば、そこから「ポチ」「タロウ」「シロ」といった実際の犬(インスタンス)を何匹でも作れるんだ。設計図を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アプリ開発の主流に
  • 現在JavaScriptES2015(ES6) でclass構文が追加され、フロントエンド開発でも広く使われるように

クラスの3大原則と関連する重要概念

オブジェクト指向の「クラス」を理解するには、3つの柱を押さえることが重要です。

クラスを支える3大原則 カプセル化 Encapsulation データと処理を ひとまとめにして 外から隠す 例)銀行口座の 残高は直接変更 できない 継承 Inheritance 既存クラスの 機能を引き継いで 拡張できる 例)Animal→Dog 犬は動物の 機能を継承する ポリモーフィズム Polymorphism 同じ命令を クラスごとに 違う動作にできる 例)bark()を呼ぶと 犬→「ワン」 猫→「ニャー」 3つの原則すべての土台が「クラス」という設計図

クラスベース vs プロトタイプベース

すべての言語がクラスベースというわけではありません。JavaScriptは元々プロトタイプベースと呼ばれる別の仕組みを使っており、ES6以降に追加されたclass構文は「糖衣構文(シンタックスシュガー)」と呼ばれる、見た目だけクラス風にしたものです。

方式特徴代表的な言語
クラスベース設計図(クラス)からインスタンスを生成Java, Python, C#, Ruby
プロトタイプベース既存オブジェクトをコピー・参照して拡張JavaScript(内部的に)

抽象クラスとインターフェース

概念説明用途
抽象クラスインスタンス化できない、共通の骨格を定義するクラス継承元として使う
インターフェース処理の名前と引数だけを定義(実装なし)複数クラスへの共通の約束として使う

関連用語