プログラミングパラダイムの比較

手続き型、オブジェクト指向、関数型、宣言型の特徴とメリット・デメリットを比較する。

作成日: 2026-07-22 / 更新日: 2026-07-22

キーワード: 手続き型 / オブジェクト指向 / 関数型 / 宣言型 / メリット / デメリット

概要

手続き型、オブジェクト指向、関数型、宣言型は、互いに排他的な分類ではありません。

実際のアプリケーションでは、業務ルールをオブジェクト指向で整理し、データ変換に関数型の考え方を使い、SQLを宣言的に記述し、細かな処理を手続き型で書く、といった組み合わせが一般的です。

全体比較

観点手続き型オブジェクト指向関数型宣言型
中心となる考え方処理手順状態と振る舞いを持つオブジェクト関数と値の変換得たい結果や状態
主な構成単位関数、手続き、変数クラス、オブジェクト、インターフェース純粋関数、不変値宣言、規則、制約
状態変更直接変更することが多いオブジェクト内部へ閉じ込めるできるだけ避ける実行側へ任せることが多い
処理順序明示するメソッド呼び出しとして表れる関数の合成として表す原則として細かく指定しない
得意なこと短い逐次処理、アルゴリズム業務ルール、状態遷移、変更の局所化データ変換、計算、並行処理検索、構成、UI、状態管理
注意点可変状態と長大な処理過剰な抽象化、責務の肥大化学習コスト、副作用の扱い実行過程と性能が見えにくい

メリットとデメリット

パラダイムメリットデメリット
手続き型実行順序が明確で、小さな処理を理解しやすい共有状態や長い処理が増えると変更箇所を追いにくい
オブジェクト指向状態とルールをまとめ、責務と変更範囲を整理しやすいクラスや継承を増やしすぎると構造が複雑になる
関数型状態変更を減らし、テストや並行処理を扱いやすくする抽象化に慣れが必要で、現実の副作用は別途扱う必要がある
宣言型手順ではなく目的を簡潔に表し、実行側の最適化を利用できる実際の動作や性能問題を理解するには実行基盤の知識が必要になる

Javaでの使い分け

Javaはオブジェクト指向だけで書く言語ではありません。

public Receipt calculateReceipt(Order order) {
    int subtotal = order.getItems().stream()
        .mapToInt(item -> item.getPrice() * item.getQuantity())
        .sum();

    int fee = subtotal >= 5000 ? 0 : 500;
    return new Receipt(subtotal, fee);
}

この短いコードにも複数の考え方があります。

さらに注文をDBから取得するSQLは宣言型です。一つのシステム内で、それぞれの得意分野を組み合わせます。

判断の目安

手続き型を選びやすい場合

オブジェクト指向を選びやすい場合

関数型を選びやすい場合

宣言型を選びやすい場合

どれを選ぶべきか

特定のパラダイムへ統一することより、複雑さの置き場所を意識することが重要です。

短い処理へ多くのクラスを作る必要はなく、状態遷移の多い業務ロジックを一つの巨大な手続きへ書く必要もありません。問題に合う考え方を組み合わせます。

更新履歴

  • 初版作成

関連項目

このページを参照しているページ