オブジェクト指向プログラミング おぶじぇくとしこうぷろぐらみんぐ
簡単に言うとこんな感じ!
「モノ(オブジェクト)」を主役にしてプログラムを組む考え方だよ!たとえば「社員」っていうモノに「名前・部署・給料」のデータと「勤怠を打刻する・有休を申請する」という動作をひとまとめにして管理するイメージ。整理整頓上手なプログラムの書き方ってこと!
オブジェクト指向プログラミングとは
オブジェクト指向プログラミング(Object-Oriented Programming、略してOOP) とは、現実世界の「モノ(オブジェクト)」をそのままプログラムの部品として表現し、それらを組み合わせてシステムを作る設計思想・プログラミングスタイルです。データ(状態)と、そのデータを操作する処理(振る舞い)をひとつの塊にまとめて扱うのが最大の特徴です。
従来の「手続き型プログラミング」が「処理の手順をひとつずつ書いていく」スタイルだったのに対し、OOPは「どんなモノが存在して、どう連携するか」という視点で設計します。これによりプログラムが読みやすく、修正・再利用がしやすくなるため、現代の業務システム・Webアプリ・スマホアプリの開発でほぼ標準的に採用されています。
発注者・管理者の立場では、「このシステムはオブジェクト指向で設計されています」と聞いたとき、「部品ごとに整理されていて、後から変更・追加がしやすい構造になっている」と理解しておくと、開発会社との会話が円滑になります。
OOPを支える4つの柱
OOPには「4つの基本概念」があります。これを覚えておくだけで、エンジニアとの会話がぐっとスムーズになります。
| 概念 | 読み | 一言で言うと | 具体例 |
|---|---|---|---|
| カプセル化 | かぷせるか | データと処理をひとつの箱に閉じ込める | 社員証に「氏名・権限」をまとめ、外から直接書き換えられないようにする |
| 継承 | けいしょう | 既存の部品を引き継いで新しい部品を作る | 「社員」クラスを元に「正社員」「契約社員」を作る |
| ポリモーフィズム | ぽりもーふぃずむ | 同じ命令を送っても、受け取るモノによって動きが変わる | 「印刷して」と言うと、PDFなら電子保存・プリンターなら紙出力 |
| 抽象化 | ちゅうしょうか | 共通の特徴だけを取り出してシンプルに表現する | 「乗り物」という概念で車・バス・電車を統一的に扱う |
クラスとインスタンスの覚え方
OOPでよく出てくる クラス(class) と インスタンス(instance) という言葉も押さえておきましょう。
クラス = 設計図・型枠
インスタンス = 設計図から作られた実物
例:
クラス → 「たい焼きの型」
インスタンス → 「焼きあがった1匹1匹のたい焼き」
「社員クラス」という設計図を作っておけば、「田中さん」「鈴木さん」という個別の社員を何人でも生み出せます。型枠(クラス)は1つ、実物(インスタンス)は何個でも、というイメージです。
主なOOP対応プログラミング言語
| 言語 | 特徴 | 主な用途 |
|---|---|---|
| Java | 厳格なOOP。業務システムに多い | 基幹システム・Androidアプリ |
| Python | 書きやすく学びやすい | AI・データ分析・Web |
| C# | Microsoftエコシステムとの親和性が高い | Windowsアプリ・ゲーム(Unity) |
| Ruby | 「楽しさ」重視の設計 | WebサービスのAPI |
| Swift / Kotlin | モバイルアプリ向け | iOS / Androidアプリ |
歴史と背景
- 1960年代 — ノルウェーの研究者が「Simula」という言語を開発。世界初のオブジェクト指向言語とされ、クラスと継承の概念を初めて導入した
- 1970年代 — Xerox PARCが Smalltalk を開発。OOPの概念を洗練させ、「オブジェクト指向」という言葉が広まる
- 1983年 — C++ が登場。C言語にOOPを加えた形で、商用開発に普及し始める
- 1995年 — Java と Ruby が相次いでリリース。「一度書けばどこでも動く」Javaがエンタープライズ市場を席巻
- 2000年代 — WebアプリケーションブームでOOPが事実上の標準に。フレームワーク(Rails・Springなど)が普及
- 2010年代〜 — Python のAI・機械学習ブームで再び注目。クラウドネイティブ・マイクロサービスとの組み合わせで現在も主流の設計思想
手続き型 vs オブジェクト指向:何が違う?
OOPと比較されることの多い「手続き型プログラミング(Procedural Programming)」との違いを整理します。
| 比較項目 | 手続き型 | オブジェクト指向 |
|---|---|---|
| 中心的な考え方 | 処理の手順 | モノとその関係 |
| コードの再利用 | 関数の再利用 | クラス・継承で再利用 |
| 変更への強さ | 影響範囲が広がりやすい | 部品単位で修正しやすい |
| 向いている規模 | 小〜中規模 | 中〜大規模 |
| 代表言語 | C・Pascal | Java・Python・C# |
関連用語
- クラス — オブジェクトの設計図・型枠となるプログラムの構造単位
- インスタンス — クラス(設計図)から実際に生み出されたオブジェクトの実体
- 継承 — 既存クラスの性質を引き継いで新しいクラスを定義する仕組み
- カプセル化 — データと処理を一つにまとめ、外部から直接アクセスできないようにする概念
- デザインパターン — OOPにおける再利用可能な設計の定石・ベストプラクティス集
- フレームワーク — アプリ開発の骨格となるプログラム群。OOPを活用して作られることが多い
- API — オブジェクトやシステム同士が連携するための窓口・取り決め
- マイクロサービス — OOPの部品化思想をシステム設計レベルに拡張したアーキテクチャスタイル