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

オブジェクト指向プログラミング おぶじぇくとしこうぷろぐらみんぐ

クラスインスタンスカプセル化継承ポリモーフィズム抽象化
オブジェクト指向プログラミングについて教えて

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

「モノ(オブジェクト)」を主役にしてプログラムを組む考え方だよ!たとえば「社員」っていうモノに「名前・部署・給料」のデータと「勤怠を打刻する・有休を申請する」という動作をひとまとめにして管理するイメージ。整理整頓上手なプログラムの書き方ってこと!


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

オブジェクト指向プログラミング(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年JavaRuby が相次いでリリース。「一度書けばどこでも動く」Javaがエンタープライズ市場を席巻
  • 2000年代 — WebアプリケーションブームでOOPが事実上の標準に。フレームワーク(Rails・Springなど)が普及
  • 2010年代〜Python のAI・機械学習ブームで再び注目。クラウドネイティブマイクロサービスとの組み合わせで現在も主流の設計思想

手続き型 vs オブジェクト指向:何が違う?

OOPと比較されることの多い「手続き型プログラミング(Procedural Programming)」との違いを整理します。

手続き型 vs オブジェクト指向 手続き型プログラミング 処理1:社員データ読み込み (関数を呼び出す) 処理2:給与計算 (別の関数を呼び出す) 処理3:明細書を出力 (また別の関数を呼ぶ) ▶ 処理の流れを上から順に記述 オブジェクト指向 「社員」オブジェクト データ: 名前・部署・給与 処理: 計算する・出力する 「部署」オブジェクト データ: 部署名・予算・社員一覧 処理: 社員を追加・削除 オブジェクト同士が連携 ▶ モノ同士の関係で記述
比較項目手続き型オブジェクト指向
中心的な考え方処理の手順モノとその関係
コードの再利用関数の再利用クラス・継承で再利用
変更への強さ影響範囲が広がりやすい部品単位で修正しやすい
向いている規模小〜中規模中〜大規模
代表言語C・PascalJava・Python・C#

関連用語

  • クラス — オブジェクトの設計図・型枠となるプログラムの構造単位
  • インスタンス — クラス(設計図)から実際に生み出されたオブジェクトの実体
  • 継承 — 既存クラスの性質を引き継いで新しいクラスを定義する仕組み
  • カプセル化 — データと処理を一つにまとめ、外部から直接アクセスできないようにする概念
  • デザインパターン — OOPにおける再利用可能な設計の定石・ベストプラクティス集
  • フレームワーク — アプリ開発の骨格となるプログラム群。OOPを活用して作られることが多い
  • API — オブジェクトやシステム同士が連携するための窓口・取り決め
  • マイクロサービス — OOPの部品化思想をシステム設計レベルに拡張したアーキテクチャスタイル