未来電子テクノロジーでインターンをしている@yuka_ponです。
プログラミングパラダイムを学ぼうと思い、Programming Paradigms を参照しました。
ここから学んだことを整理したいと思います。
初めて学んだので、違う点や知っておくべきことがあればコメントしていただけると幸いです!
#プログラミングパラダイムとは
プログラミングパラダイムとは、プログラミングの考え方と記述方法の枠組みを規定するものです。
また、その考え方や記述方法にはいくつか種類があります。
それは、命令型言語(Imperative)、宣言型言語(Declarative)、構造化プログラミング(Structured)、手続き型言語(Procedural)、関数型言語(Functional)、オブジェクト指向言語(Object-Oriented)などです。
今回は、その中でもよく使われる言語を取り上げます。
##命令型言語
命令型言語(Imperative Programming)とは、命令(代入文)を繰り返し入力することで変数の値(「状態」)を変動させて計算をすることで、最も一般的なパラダイムとも言われています。
ここでの「計算」とは、計算モデルを指します。
計算モデルとは、コンピューターが行う計算を抽象的に考察した数学的枠組みのことです。
つまり、メモリからデータを読み取って演算を行い、結果をメモリに書き込むという動作をするという意味です。
そのため、演算の他にプログラムの解釈を変える宣言文やメモリへの書き込み、命令の順序を決める制御文といった命令をすることもできます。
##宣言的言語
宣言的言語(Declarative Programming)とは、プログラミング上での操作結果を示す処理を行う意味です。
命令型言語との違いは、結果を示す方法の処理を入力するかしないかに当たります。
##構造化プログラミング
構造化プログラミング(Structured Programming)とは、プログラムを機能や処理ごとにブロック別に分けて積み重ねた構造のことを指します。
そのため、処理を行うときはブロック単位を動作させて機能の追加や削除をするのです。
また、制御文を用いた命令型言語と一致するため、テキスト上の言語と機能的な言語は同じになるという特徴も持ちます。
そのため、とても見やすくさせるパラダイムとも言えます。
そして、GOTO文を排除させることもできます。
GOTO文とは、別のワープに移動させる機能を持っており主にC++に利用されます。
しかし、GOTO文は制御を自由に変えられることから、入力内容を複雑にさせるときもあります。
この文を構造化プログラミングは排除できるということなのです。
##オブジェクト指向言語
オブジェクト指向言語(Object Oriented Programming、OOP)とは、プログラム上の計算対象をオブジェクト化(物体化)したもので、名前や属性(データ)、操作(メソッド)を自分自身で持ちます。
このとき、構造型プログラミングとの違いがわからないときが多々あります。
2つの違いは、構造型プログラミングは別々の型を作成するに対して、オブジェクト指向言語はクラスを作ってその中にメソッドなどを構築します。
つまり、オブジェクト指向言語にはカプセル化という重要な働きを発揮するのです。
カプセル化とは、関連するデータの集合体を操作する意味で、外部からの干渉から防止する役割を持っています。
構造化プログラミングとオブジェクト指向言語の違いについて詳しく知りたい方はコチラ。
##関数型言語
関数型言語(Functional Programming)とは、変数に値を代入するのではなく値を関数として処理するものです。
つまり、関数を組み合わせて表現する手法を指します。
しかし、同じ関数を用いても式に入力した内容を変えることで、異なった答えを導くことがあります。
これは、物体すなわち「答え」を予め指定するオブジェクト指向言語と大きく違う点です。
関数型言語はこのような「副作用」をなくすように処理します。
関数型言語について詳しく知りたい方はコチラ。
##論理型言語
論理型言語(Logic and Constraint Programming)とは、論理式を組み合わせて結論や答えを導くものです。
プログラム上で表現するために、事実や規則を使って「質問」を作成し、その「答え」を得るために論理推論を用いて計算する流れとなっています。
この流れにPrologを利用するときが多いです。
Prologとは、関数ではなく関係をベースに述語を使った記入方法です。
その述語は、事実と規則(プログラム)、質問、その解答という流れで記入します。
このように、自ら仮説を立てて結論を導くというイメージを持つと良いです。
#まとめ
このように、プログラミングパラダイムにはさまざまな種類があります。
しかし、100%同じパラダイムで実装できるわけではありません。
大半は関数型言語を用いても、必要に応じて別のパラダイムを使用するときもあります。
パラダイムは、使用別を意識する必要はあるみたいです。