プログラミングパラダイム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/09/29 13:14 UTC 版)
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2015年12月) |
![]() | この記事は英語版の対応するページを翻訳することにより充実させることができます。(2024年8月) 翻訳前に重要な指示を読むには右にある[表示]をクリックしてください。
|
プログラミングパラダイム(英: programming paradigm)とは、プログラミングにおける模範である。
概要
プログラミングパラダイムは、プログラマにプログラムの見方を与えるものと言える。例えばオブジェクト指向プログラミングでは、プログラムとはオブジェクトを作りそれを管理するもの。関数型言語では、状態を持たない関数の評価の連続。
プログラミング言語が違えば、対応できるパラダイムも違ってくる。SmalltalkやJavaは、手続き型やオブジェクト指向、Haskellは、関数プログラミング、というように、比較的少数のパラダイムに対応している。一方、多数のパラダイムに対応した言語(マルチパラダイムプログラミング言語)もある。
多くのプログラミングパラダイムには禁じ手がある。純粋な関数型プログラミングでは、副作用があってはならない。構造化プログラミングでは、gotoの無制限な利用が戒められる。特にこの理由により、古いスタイルに慣れた者からは、よく非現実的または過剰に厳密なものと見なされる。しかし、こうした特定のテクニックを避けることで、プログラミング言語の一般の法則に制約されず、プログラムの正確さ(または単にその動作の理解)についての法則を証明しやすくする。
マルチパラダイムプログラミング言語が登場してから、プログラミングパラダイムとプログラミング言語との関連は複雑になっている。たとえば、C++は手続き型プログラミング、ジェネリックプログラミング、オブジェクト指向プログラミングに対応するよう設計されているが、設計時には個々の部分毎にどのパラダイムを使うか選ぶ必要に迫られる。あるプログラムは全て手続き型プログラミングで作り、またあるプログラムは全てオブジェクト指向で作り、また別のプログラムは両方を混在して作るという具合である。
例
![]() | この節には独自研究が含まれているおそれがあります。 |
比較されるものは横に並べてある。括弧内はそれを用いている例である。
- 構造化プログラミング - 非構造化プログラミング
- 命令型プログラミング - 宣言型プログラミング
- メッセージ送信プログラミング(アクターモデル)
- 手続き型プログラミング - 非手続き型言語
- イベント駆動型プログラミング
- シグナルプログラミング
- スタック指向プログラミング
- クラスベースプログラミング - プロトタイプベースプログラミング ※オブジェクト指向プログラミングの中での分類
- 並行論理プログラミング
- 制約プログラミング
- 論理プログラミング
- 解集合プログラミング(en: Answer Set Programming)
- 制約論理プログラミング
- 並行プログラミング
- 並行制約プログラミング
- 関数型プログラミング
- コンポーネント指向プログラミング (OLE)
- アスペクト指向プログラミング (AspectJ)
- 契約プログラミング
- リフレクティブプログラミング
- データフロープログラミング
- リアクティブプログラミング (スプレッドシート)
関連項目
プログラミングパラダイム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/07 09:26 UTC 版)
「ソフトウェア開発方法論」の記事における「プログラミングパラダイム」の解説
プログラミングパラダイムはコンピュータプログラミングの根本的なスタイルであり、対照的にソフトウェア開発方法論は特定のソフトウェア工学問題を解く際のスタイルである。個々のパラダイムは、(オブジェクト、関数、変数、制約などの)プログラムの要素と(代入、評価、処理フロー、データフローなどの)処理ステップを表現する概念と抽象化がそれぞれ固有のものとなっている。 プログラミング言語は何らかのプログラミングパラダイムをサポートすることができる。例えばC++や Object Pascal でのプログラムは、純粋に手続き的に書くこともできるし、純粋にオブジェクト指向的に書くこともでき、両方のパラダイムの要素を含むプログラムとして書くこともできる。オブジェクト指向プログラミングでは、プログラマはプログラムを相互作用するオブジェクトの集まりと考えることができ、関数型プログラミングでは状態を持たない関数評価の並びと考えることができる。多数のプロセッサを有するコンピュータやシステムでのプログラミングでは、プロセス指向プログラミング(英語版)を採用することで、データ構造を論理的に共有し並行動作するプロセス群と考えてプログラミングすることができる。 ソフトウェア工学に様々な「方法論」があるように、プログラミング言語はそれぞれ異なる「プログラミングパラダイム」を推奨している。単一のパラダイムをサポートするよう設計された言語(例えば、オブジェクト指向プログラミングをサポートするSmalltalk、関数型プログラミングをサポートするHaskellなど)もあれば、複数のパラダイムをサポートする言語(Object Pascal、C++、C#、Visual Basic、Common Lisp、Scheme、Python、Ruby、Ozなど)もある。 多くのプログラミングパラダイムには、それによって可能になることと引き換えに「禁止」されていることがある。例えば、純粋な関数型プログラミングでは副作用の利用が禁じられている。また、構造化プログラミングではGoto文の利用が禁じられている。
※この「プログラミングパラダイム」の解説は、「ソフトウェア開発方法論」の解説の一部です。
「プログラミングパラダイム」を含む「ソフトウェア開発方法論」の記事については、「ソフトウェア開発方法論」の概要を参照ください。
- プログラミング・パラダイムのページへのリンク