はじめに
プログラミングの世界には、長い歴史の中でさまざまなパラダイム(paradigm) が登場してきました。
代表的なものに 構造化プログラミング(Structured Programming)、オブジェクト指向プログラミング(OOP: Object-Oriented Programming)、関数型プログラミング(FP: Functional Programming) があります。
これらはそれぞれ異なる考え方や抽象化の手法を持ち、現代のソフトウェア開発では多くの場合、混在して活用 されています。
1. 構造化プログラミング(Structured Programming)
概要
- 1960年代に登場
- goto文の乱用によるスパゲッティコード を避けるために、プログラムを「構造(順次・分岐・繰り返し)」で組み立てる手法
- アルゴリズムの明確化や可読性向上を目的とした
特徴
- 制御構造(if, for, while)の活用
- トップダウン設計
- モジュール分割(関数や手続き単位で管理)
メリット
- 読みやすさ、デバッグのしやすさ
- 手続き型言語(C, Pascal など)に直結
2. オブジェクト指向プログラミング(OOP)
概要
- 1980年代に普及
- ソフトウェアを「オブジェクト(モノ)」という単位に分割して捉える
- データ(属性) と 振る舞い(メソッド) を一体化
特徴
- カプセル化(Encapsulation)
- 継承(Inheritance)
- ポリモーフィズム(Polymorphism)
- クラスやインスタンスを通じて世界をモデリング
メリット
- 大規模開発における再利用性
- ドメインの現実世界モデリングに近い
- Java, C++, Kotlin, Swift など多くの主流言語に採用
3. 関数型プログラミング(FP)
概要
- 数学の「関数」を基盤にしたパラダイム
- 状態(mutable state)や副作用を避ける ことを重視
- 近年は並列・分散処理やデータ処理における安全性の観点から再注目されている
特徴
- イミュータブルデータ(不変性)
- 高階関数(Higher-order functions)
- 純粋関数(Pure function)
- 宣言的スタイル(「何をするか」を書く)
メリット
- 副作用が少なくテストが容易
- 並列・並行処理に強い
- Scala, Haskell, Elixir, F#, さらに Java/Kotlin/JavaScript もFP要素を取り込み中
4. 比較まとめ
| 観点 | 構造化 | OOP | FP |
|---|---|---|---|
| 誕生 | 1960年代 | 1980年代 | 1950年代(Lisp)〜再評価は2000年代以降 |
| 主な単位 | 手続き・関数 | オブジェクト(クラス+インスタンス) | 関数 |
| 重視点 | 制御構造とモジュール化 | データと振る舞いの一体化 | イミュータビリティと純粋性 |
| メリット | シンプル・可読性 | 大規模開発・モデリング | 並列処理・安全性 |
| 代表言語 | C, Pascal | Java, C++, Kotlin | Haskell, Scala, Elixir |
まとめ
- 構造化は「アルゴリズムをきれいに書く」
- OOPは「現実世界をモデル化する」
- FPは「数理的に安全で並列化に強い」
現代の主流言語(Java, Kotlin, Swift, Python, JavaScript, Dartなど)は、これらの要素をハイブリッドに取り込んでいます。
開発者は問題の性質に応じて最適なパラダイムを組み合わせて活用することが求められています。