プログラミングパラダイム()とは、プログラムをどのような考え方や構造に基づいて設計するかを定める枠組みであり、プログラムの構成方法の違いを分類するために用いられる概念である。
概要 プログラミングパラダイムは、プログラマにプログラムの見方を与えるものと言える。例えばオブジェクト指向プログラミングでは、プログラムとはオブジェクトを作りそれを管理するもの。関数型言語では、状態を持たない関数の評価の連続。
プログラミング言語が違えば、対応できるパラダイムも違ってくる。SmalltalkやJavaは、手続き型やオブジェクト指向、Haskellは、関数プログラミング、というように、比較的少数のパラダイムに対応している。一方、多数のパラダイムに対応した言語(マルチパラダイムプログラミング言語)もある。
多くのプログラミングパラダイムには禁じ手がある。純粋な関数型プログラミングでは、副作用があってはならない。構造化プログラミングでは、gotoの無制限な利用が戒められる。特にこの理由により、古いスタイルに慣れた者からは、よく非現実的または過剰に厳密なものと見なされる。しかし、こうした特定のテクニックを避けることで、プログラミング言語の一般の法則に制約されず、プログラムの正確さ(または単にその動作の理解)についての法則を証明しやすくする。
マルチパラダイムプログラミング言語が登場してから、プログラミングパラダイムとプログラミング言語との関連は複雑になっている。たとえば、C++は手続き型プログラミング、ジェネリックプログラミング、オブジェクト指向プログラミングに対応するよう設計されているが、設計時には個々の部分毎にどのパラダイムを使うか選ぶ必要に迫られる。あるプログラムは全て手続き型プログラミングで作り、またあるプログラムは全てオブジェクト指向で作り、また別のプログラムは両方を混在して作るという具合である。
例
比較されるものは横に並べてある。括弧内はそれを用いている例である。 構造化プログラミング - 非構造化プログラミング 命令型プログラミング - 宣言型プログラミング メッセージ送信プログラミング(アクターモデル) 手続き型プログラミング - 非手続き型言語 イベント駆動型プログラミング シグナルプログラミング スタック指向プログラミング クラスベースプログラミング - プロトタイプベースプログラミング ※オブジェクト指向プログラミングの中での分類 並行論理プログラミング 制約プログラミング 論理プログラミング 解集合プログラミング(:en: Answer Set Programming) 制約論理プログラミング 並行プログラミング 並行制約プログラミング 関数型プログラミング コンポーネント指向プログラミング (OLE) アスペクト指向プログラミング (AspectJ) 契約プログラミング リフレクティブプログラミング データフロープログラミング (スプレッドシート)
関連項目 抽象化 (計算機科学) Expression problem