手続き型とオブジェクト指向の違いとは?図解でスッキリ解説!

悩んでる人

手続き型とオブジェクト指向の違いが全然わからない

悩んでる人

どっちを使えばいいの?現場ではどちらが多いの?

プログラミングを勉強していると、必ずと言っていいほど登場するのが「手続き型」と「オブジェクト指向」という言葉です。

言葉は聞いたことがあるけど、何が違うのかピンとこない人が多いと思います。

おしけん

どちらも「プログラムの書き方の考え方(パラダイム)」の違いです!
具体的なイメージを持てれば、スッキリ理解できますよ!

本記事では、手続き型とオブジェクト指向の違いを、図解と具体例を使ってわかりやすく解説します。

「なんとなく聞いたことある」という方も、「全然わからない」という方も、ぜひ最後まで読んでみてください!

この記事を書いた人
  • システムエンジニア10年目
  • 会社員3年⇒フリーランス7年目
  • 保険系 / 物流系 / 鉄道系 / 小売系などのシステム開発に従事
  • プログラミング講師
目次

手続き型とオブジェクト指向の違いとは?

「手続き型」と「オブジェクト指向」の違いは、プログラムをどう整理して書くかの「設計思想」や「考え方」

最初に、手続き型とオブジェクト指向の違いをしっかり整理しましょう。

ここを理解しておくと、この後の内容がスムーズに頭に入ってきますよ。

簡単に言えば
  • 手続き型は「処理の手順を上から順番に書く」スタイル
  • オブジェクト指向は「データと処理をモノとしてまとめて扱う」スタイル
料理で例えるとこんなイメージ

手続き型 = レシピ通りに「①切る → ②炒める → ③味付け → ④盛り付け」と手順を上から実行するイメージ。

オブジェクト指向 = 「鍋・フライパン・包丁」という道具(部品)を用意して、それぞれに役割を持たせて組み合わせるイメージ。

おしけん

料理の例でイメージできましたか?

次は比較表で、違いをさらに詳しく整理していきます!

比較項目手続き型オブジェクト指向
基本の考え方処理の手順を順番に書くデータと処理を部品にまとめる
プログラムの単位関数(Function)クラス(Class)
データ管理処理から分離して存在するクラス内にまとめて管理する
コードの再利用やや難しい継承などで再利用しやすい
小規模開発◎ シンプルで書きやすい○ 使えるが設計が必要
大規模・チーム開発△ 複雑化しやすい◎ 整理・管理しやすい
学習難易度★★☆☆☆ 比較的やさしい★★★☆☆ 概念の理解が必要
代表的な言語C言語・COBOL・PascalJava・C#・Python・Ruby
注意!「どちらかしか使えない」わけではない

PythonやJavaScriptは手続き型とオブジェクト指向の両方をサポートしています。
現代の多くの言語はマルチパラダイムです。

状況に応じて使い分けるのがプロのエンジニアの技術です!

おしけん

それぞれのスタイルをコード例を使ってさらに詳しく解説していきます!

手続き型プログラミングとは?

手続き型プログラミング(Procedural Programming) は、プログラムを「命令を上から順番に実行する手順の並び」として記述するスタイルです。

処理を関数(Function)という単位に分けて整理するのが一般的です。

おしけん

「書いた順番にプログラムが動く」とシンプルに覚えましょう!プログラミング入門で最初に触れるスタイルです!

悩んでる人

読みやすいし、これで十分な気もするけど…

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

オブジェクト指向プログラミング(Object-Oriented Programming / OOP) は、プログラムを「データと処理をひとまとめにした部品の組み合わせ」として記述するスタイルです。

その「部品」のことをクラス、クラスから作った実体のことをインスタンスと呼びます。

クラスとインスタンスのイメージ

クラス = 「車の設計図」
インスタンス = 「設計図をもとに作られた実際の車」

1枚の設計図(クラス)から「プリウス」「クラウン」「カローラ」など、何台でも車(インスタンス)を作れるイメージです。

おしけん

クラスとインスタンスの違いはオブジェクト指向の第一歩です!「設計図と実体」の関係と覚えれば大丈夫ですよ!

違いをサンプルコードで比較しよう

「社員情報を管理するシステム」を例に、2つの書き方を見比べてみましょう。

手続き型のサンプルコード例

データ(変数)と処理(関数)が別々に存在しているのが特徴です。

// 手続き型:データと処理がバラバラに存在する

string employeeName = "山田太郎";
int    employeeAge  = 32;
string employeeDept = "開発部";

void ShowEmployee(string name, int age, string dept)
{
    Console.WriteLine($"名前:{name}、年齢:{age}歳、部署:{dept}");
}

void GiveBonus(string name, int bonus)
{
    Console.WriteLine($"{name}にボーナス{bonus}円を支給しました");
}

ShowEmployee(employeeName, employeeAge, employeeDept);
GiveBonus(employeeName, 100000);
社員が100人に増えたら…

変数が300個(名前・年齢・部署 × 100人分)に膨れ上がります。
「どの変数が誰のデータか」を管理するだけで大変になり、バグの温床になりやすい構造です。

オブジェクト指向型のサンプルコード例

データも処理も「Employeeクラス」という一つの部品にまとまっています。

// オブジェクト指向:データと処理をクラスにひとまとめ

class Employee
{
    public string Name { get; private set; }
    public int    Age  { get; private set; }
    public string Dept { get; private set; }

    public Employee(string name, int age, string dept)
    {
        Name = name;
        Age  = age;
        Dept = dept;
    }

    public void Show()
    {
        Console.WriteLine($"名前:{Name}、年齢:{Age}歳、部署:{Dept}");
    }

    public void GiveBonus(int bonus)
    {
        Console.WriteLine($"{Name}にボーナス{bonus}円を支給しました");
    }
}

// 社員が増えてもインスタンスを追加するだけ!
var yamada = new Employee("山田太郎", 32, "開発部");
var suzuki = new Employee("鈴木花子", 28, "営業部");

yamada.Show();
suzuki.GiveBonus(80000);
オブジェクト指向型なら社員100人でも安心

「Employeeクラスのインスタンスを100個作るだけ」でOKです!
データと処理がひとまとめになっているので、どこを見ればいいかが一目瞭然になります。

おしけん

オブジェクト指向型は「似たものをまとめる」発想です!規模が大きくなればなるほど、その真価を発揮しますよ!

どちらを使えばいいの?使い分けを解説

悩んでる人

結局、どっちがいいの?

おしけん

目的・規模・言語によって使い分けるのがベストです!どちらが優れているというわけではありませんよ!

現場のリアル

現代の業務システムやWebアプリ開発では、オブジェクト指向が標準的になっています。
Java・C#・Pythonなどを使う現場では、OOPの知識は必須スキルです。
一方、シェルスクリプトや自動化ツールでは手続き型スタイルが今でも多く使われています。

おしけん

エンジニアを目指すならオブジェクト指向型は絶対に押さえておくべき知識です!

まずは手続き型でプログラミングの基礎に慣れてから、オブジェクト指向型に進むのがおすすめの順番ですよ!

手続き型 / オブジェクト指向型の対応言語の代表例

それぞれのスタイルに対応した代表的な言語を整理しておきましょう。

言語名手続き型オブジェクト指向主な用途
C言語◎ メイン△ 非対応組み込み・OS開発で現役
COBOL◎ メイン△ 非対応金融・基幹システムで現役
Java○ 対応◎ メイン業務系・Androidアプリ
C#○ 対応◎ メインWindowsアプリ・ゲーム開発
Python◎ 両方OK◎ 両方OKAI・Web・データ分析など幅広く
JavaScript◎ 両方OK◎ 両方OKWebフロントエンド・Node.js
Ruby○ 対応◎ メインWebアプリはRailsが有名
おしけん

PythonやJavaScriptは「どちらのスタイルでも書けるマルチパラダイム言語」です!状況に応じて柔軟に使い分けられるのが強みですよ!

よくある疑問Q&A

手続き型とオブジェクト指向型はどちらが優れているの?

どちらが優れているわけではありません!目的・規模・言語によって使い分けるのがベストです。C言語はいまでも組み込み系やOS開発の現場で現役ですよ!

初心者はどちらから学べばいいの?

手続き型からスタートして、変数・条件分岐・ループなどの基礎に慣れてからオブジェクト指向に進むのがおすすめです!オブジェクト指向は概念が難しく感じるので、土台があると理解がグッとラクになりますよ!

オブジェクト指向をはなぜ難しく感じるの?

オブジェクト指向は「考え方の概念」なので、実際にコードを書かないと体感しにくいんです!クラスを作って→インスタンスを生成して→メソッドを呼ぶ、という流れを手を動かして覚えることが大切ですよ!

オブジェクト指向を学ぶには何から始めればいいの?
  1. クラスとインスタンスを理解する(設計図と実体の違いを覚える)
  2. プロパティとメソッドを理解する(データと処理の書き方を覚える)
  3. カプセル化を理解する(アクセス制御の考え方)
  4. 継承を理解する(コードの再利用の仕組みを覚える)
  5. ポリモーフィズムを理解する(柔軟な設計ができるようになる)

まとめ

本記事では、手続き型とオブジェクト指向の違いについて解説しました。最後に重要なポイントをおさらいしましょう!

  • 手続き型は「処理の手順を上から順番に記述する」スタイル
  • オブジェクト指向は「データと処理をひとまとめにした部品の組み合わせ」スタイル
  • 手続き型は小規模・シンプルな処理や入門学習に向いている
  • OOPは大規模開発・チーム開発・業務システムで力を発揮する
  • OOPの4大原則は「カプセル化・継承・ポリモーフィズム・抽象化」
  • PythonやJavaScriptはどちらのスタイルも使えるマルチパラダイム言語
  • 初心者は手続き型で基礎を固めてから、OOPに進むのがおすすめ

手続き型とオブジェクト指向の違い、イメージできましたか?

まずはコードを書いて体で覚えることが大切です!

一歩ずつ着実に進めていきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次