プログラミングパラダイム
出典: フリー百科事典『ウィキペディア(Wikipedia)』
プログラミングパラダイム (programming paradigm)とはプログラミングにおけるパラダイムである。
プログラミングパラダイムは、プログラマにプログラムの見方を与えるものと言える。たとえば、オブジェクト指向プログラミングにおいて、プログラムとはオブジェクトをつくりそれを管理するものである。関数型プログラミングにおいては、状態を持たない関数の評価の連続である。
プログラミング言語が異なれば、対応できるパラダイムも異なってくる。SmalltalkやJavaはオブジェクト指向プログラミングのみに対応しており、HaskellやSchemeは関数プログラミングのみに対応している。一方で、Common LispやPythonのように複数のパラダイムに対応した言語(マルチパラダイムプログラミング言語)も存在する。
多くのプログラミングパラダイムでは、「やってはいけないこと」(禁じ手)が存在する。たとえば純粋な関数型プログラミングでは、副作用があってはならず、構造化プログラミングではgotoの使用価値を認めていない。特にこの理由により、古いスタイルに慣れている人々からは非現実的または過剰に厳密なものとしてよく見なされる。しかしながら、こうした特定のテクニックを避けるということで、プログラミング言語の一般的な法則に制約されることなく、プログラムの正確さ(あるいは単にその動作を理解すること)についての法則を証明しやすくする。
マルチパラダイムプログラミング言語が登場してから、プログラミングパラダイムとプログラミング言語との関連は複雑になっている。たとえば、C++は手続き型プログラミング、汎用プログラミング、オブジェクト指向プログラミング、総称プログラミングに対応するよう設計されているが、設計時には個々の部分毎にどのパラダイムを使うか選ぶ必要に迫られる。あるプログラムは全て手続き型プログラミングで作り、またあるプログラムは全てオブジェクト指向で作り、また別のプログラムは両方を混在して作るという具合である。
[編集] 例
対になるものは横に並べてある。括弧内はそれを用いている例である。
- データ指向プログラミング
- 構造化プログラミング - 非構造化プログラミング
- 命令型プログラミング - 宣言型プログラミング
- メッセージ送信プログラミング - 命令型プログラミング
- 手続き型プログラミング - 関数型プログラミング
- 値レベルプログラミング - 関数レベルプログラミング
- 逐次実行型プログラミング - イベント駆動型プログラミング
- スカラプログラミング - ベクトルプログラミング
- クラスベースプログラミング - プロトタイプベースプログラミング ※オブジェクト指向プログラミングの中での分類
- 制約プログラミング - 論理型プログラミング
- コンポーネント指向プログラミング (OLE)
- アスペクト指向プログラミング (AspectJ)
- 論理型プログラミング (Mathematica)
- パイプラインプログラミング (パイプ)
- 課題指向プログラミング
- リフレクティブプログラミング
- データフロープログラミング (スプレッドシート)
- ポリシーベースプログラミング
- ツリープログラミング
- 註釈プログラミング (Annotative programming) - http://www.flare.org
- 属性指向プログラミング (注釈プログラミングと同じかもしれない) (Java 5 Annotations及びC#の属性)
- コンセプト指向プログラミング