プログラミングの考え方を変えるパラダイムとは?分かりやすく解説しました!
  • facebookページ
  • twitterページ
  • 2018.10.26

    プログラミングの考え方を変えるパラダイムとは?分かりやすく解説しました!

    プログラミングパラダイムとは

    プログラミングパラダイムとは、プログラミングで解決したい問題に対して、どのように記述していけば解答を得ることが出来るか、その考え方の枠組みやスタイルを表すものです。言語に対してプログラミングパラダイムは一つとは限りません。マルチパラダイムと言って、複数のパラダイムを合わせ持つ場合もあります。

    プログラミングパラダイムは、新しく言語を習得する際の難易度の指標ともなります。既に習得している言語がある場合に、同じプログラミングパラダイムを持つ言語は習得しやすいと言えます。異なるプログラミングパラダイムの場合は、基礎知識無く習得する場合と同じくらいの難易度になりますが、新しいアプローチで問題を解決に導く事が出来るようになります。

    主なプログラミングパラダイム

    プログラミングパラダイムは大きく分けて命令型、宣言型があります。これらは逆の性質を持つプログラミングパラダイムです。これらの分類にまたがる大きな分類として、オブジェクト指向プログラミングという分類もあります。

    命令型には「手続き型」、宣言型には「関数型」「論理型」のプログラミングパラダイムがあります。


    以降では各プログラミングパラダイムの概要について説明します。それぞれのプログラミングパラダイムには、メリットとデメリットがあり、開発する目的や解決したい問題によって向き不向きがあります。

    もしこれから学ぶプログラミング言語を選択する場合は、このメリットデメリットが選択のカギとなりますので是非参考にしてみて下さい。

    命令型プログラミング

    命令型プログラミングは「手続き型プログラミング」とほぼ同義で扱われることが多いです。プログラミングで解決したい問題の解答を得るために、「命令」や命令をひとまとまりに連結した「手続き」を組み合わせて記述していくものです。この「手続き」は言語によって名前が異なり、「プロシージャ」「サブルーチン」「関数」「メソッド」などと呼ばれます。

    命令型でよく見る言語としては、C#、、C++、Java、Ruby、PHP、Python等があり、実践で使用されているほとんどのメジャーな言語は命令型に分類されます。
    命令型は命令の組み合わせによってシステムの状態(変数、オブジェクト変数など)を変更します。たとえば複数の処理で参照している変数がある場合に、ある処理が変数の内容を変更した後に別の処理でその変数の内容を参照すると、思った結果が得られないことがあります。

    このように、命令の組み合わせで状態が変更されることにより、入力に対して予期せぬ結果が出力されてしまうことを「プログラミングの副作用」と呼びます。命令型のプログラミングではこの「プログラミングの副作用」が起こりやすいと言われています。その反面、ある計算結果を利用して次の計算をするような、状態遷移のある処理を記述するのに向いています。処理系をブラックボックス化せず記述していくため、性能のチューニングがしやすく、命令型プログラミングに分類されている言語は業務システムやWebシステム等で主流になっているものが多いです。

    宣言型プログラミング

    宣言型プログラミングでは命令型のように処理の手順を記述するのではなく、問題の性質や意味、制約を記述します。定義した問題の解決に至るまでの処理手順については、プログラミング言語の処理系に任せる考え方です。

    宣言型プログラミングで身近な言語にSQLがあります。SQLでは、どのようなデータを(時にはどのような順番で)取ってくるかを指定しますが、データを取ってくるためのプロセスについて記述することはありません。解の出し方についてはSQLクエリに任せています。

    前述したように、宣言型プログラミングに分類される代表として「関数型プログラミング」と「論理言語型プログラミング」があります。

    関数型プログラミング

    関数型プログラミングでは、プログラムは関数の組み合わせによって表現されます。ここで言う関数は命令型で言う「関数」とは異なり、数学的な関数を意味します。言語としてはHaskell、LISP、Scala等があります。

    関数型プログラミングでは命令型プログラミングの章で前述した「副作用」は基本的に排除する考えがあり、副作用は起こりにくいといわれています。入力に対して同じ出力が返却されるため、プログラムはシンプルなものになります。

    また、関数型プログラミングは拡張性が高いこともメリットとして挙げられます。言語自体の機能を拡張でき、文法自体を変更することも可能です。ただし、標準化が進んでいない関数型の言語では、言語自体のの機能をした場合に環境によって動作しないことも有り得ます。そのため、関数型の言語を選択する上で、標準化の進んでいる言語を選択する事も重要になります。

    論理型プログラミング

    論理型言語では関数ではなく関係を扱い、プログラムは論理式の組み合わせによって表現されます。言語でいうと1972年頃から開発されたPrologが論理型言語の代表です。Prologは歴史の古いプログラミング言語ですが、自然言語の理解等のAIに特化した言語として使われています。有名なところではソフトバンク社が開発するロボット、Pepperが会話するときの処理に使われています。

    Prologでは、事実(物事の事実)と規則(物事との関係についての規則)を積み上げて記述していき、最後に質問を与えることで、処理系が推論して解答を導き出します。
    条件が決まると解が決まるが、解法のプロセスを定義するのは難しい問題を扱う場合に適しています。逆に、解を導くためのプロセスが決まっているような問題の場合は適していません。

    オブジェクト指向プログラミング

    前述したように、命令型と宣言型とはまた異なるベクトルで分類されるのがオブジェクト指向言語です。オブジェクト指向の言語としては、C#、、C++、Java、Ruby、PHP、Scala等があり、一般的に使われている言語はオブジェクト指向に基づいていることが多いと言えます。

    オブジェクト指向言語では、対象(オブジェクト)をデータとメソッドのかたまりで扱います。データとは変数を表し、メソッドはオブジェクト内のデータの操作を行う命令です。

    オブジェクト指向のプログラミングでは、

    • オブジェクトのテンプレート(クラス)を定義
    • クラスからオブジェクト(インスタンス)を作成
    • オブジェクト間でのメッセージ送受信によってオブジェクトを操作する

    といった一連の記述をしていきます。

    ここで、クラスは対象を抽象化したもので、インスタンスは具体化された対象を表します。たとえば猫には色んな猫がいますが、これらに共通している属性を切り出して抽象化すると、猫クラスは「名前」「年齢」といった属性を持ち、「ニャーと鳴く」「ごはんをたべる」といったメソッド等、猫に共通する属性を持ちます。

    オブジェクト指向では、オブジェクトを設計する際にシステム化の対象となるものの抽象化を行うことで、システム全体を単純化して表現します。この設計方法は、システム化の対象が多い大規模開発で効果を発揮します。また、この考え方はプログラミングだけでなく、業務分析等の上流工程においても利用することができます。

    プログラミングパラダイムは一長一短!

    今回は、現時点で主流となるプログラミングパラダイムを中心に解説しました。プログラミングパラダイムは、プログラミングで解を求めるための考え方の枠組みやスタイルを表します。プログラミングパラダイムの中には「命令型」と「宣言型」があり、これらとは別のベクトルに「オブジェクト指向」という大きな分類があります。

    それぞれのプログラミングパラダイムには一長一短あり、得意分野があります。プログラミング言語の選択する場合は、それぞれのプログラミングパラダイムの特徴を踏まえて、それに該当する言語を選択するようにしましょう。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE