プログラミングパラダイム間の相違点と類似点 [重複]
質問
この質問にはすでに答えがあります:
私は過去 4 年間開発者として働いており、その前の 4 年間は大学でソフトウェア開発を勉強していました。この業界での 4 年間で、私は VB6 でいくつかの仕事をしましたが (これは冗談でした)、ほとんどは C#/ASP.NET で行ってきました。この間、私は「オブジェクト認識」手続き型パラダイムからオブジェクト指向パラダイムに移行してきました。
最近、他のプログラミング パラダイムについて興味があったので、これらのパラダイム、特に OOP の類似点と相違点について他の開発者に意見を聞いてみようと思いました。OOP では、概念間の関係と論理的な相互作用に重点が置かれていることがわかりました。他のパラダイムではどのような心構えが必要ですか?
解決
プログラミング パラダイムの最も優れた説明は、Peter van Roy の著作にあります。特に本の中で コンピュータプログラミングの概念、技術、モデル ピーター・ヴァン・ロイ、セイフ・ハリディ著. (こちらがコンパニオンWikiです。) CTM は マルチパラダイム 分散型 Oz プログラミング言語 主要なプログラミング パラダイムをすべて紹介します。
ピーター・ヴァン・ロイも作った 34 の主要なパラダイムとそれらの関係とさまざまな軸上の位置を示すこの素晴らしいポスター. 。ポスターは基本的に、CTM を信じられないほど圧縮したバージョンです。そのポスターについてのより詳しい説明は記事に含まれています 初心者向けのプログラミング パラダイム:すべてのプログラマーが知っておくべきこと 本の章として登場した コンピューターミュージックのための新しい計算パラダイム, 、G によって編集されました。アサヤグと A.ゲルツォ。
別の いくつかの主要なプログラミング パラダイムを実証する素晴らしい本です。 コンピュータプログラムの構造と解釈 ハロルド・エーベルソン、ジェラルド・ジェイ・サスマン著. 。この本は、数十年にわたって MIT の CS101 の基礎となりました。 エイベルソンとサスマン自身が教えたコースは、1986 年にヒューレット・パッカードの企業研修で録音されました。.
CTM と SICP の主な違いは、CTM は、ほとんどの主要なパラダイムを、それらをサポートする言語 (主に Distributed Oz ですが、その他のパラダイムも) を使用して実証することです。SICP OTOH はこれらを次のようにデモンストレーションします。 実装する それらを行う言語で ない それらをネイティブにサポートします (Scheme のサブセット)。オブジェクト指向が 12 行ほどのコードで実装されているのを見ると、驚くほど素晴らしいです。
発見できる MIT の OpenCourseWare Web サイトにある 2005 年春コースのビデオ録画とコース資料. MIT の短命に終わった ArsDigita University プロジェクトのコースの別の記録. 。実際、SICPは他の大学でも教えられています。 それは現在バークレーで教えられています.
個人的な話になりますが、私自身の経験では、 本当に プログラミングパラダイムを理解することは可能です
- 一度に一つのパラダイムと
- 言語で 力 あなたをパラダイムに
理想的には、パラダイムを極限まで取り入れた言語を使用することです。マルチパラダイム言語では、「騙して」自分がより快適なパラダイムに頼るのが非常に簡単です。そして、パラダイムをライブラリとして使用できるのは、この種のプログラミング用に特別に設計された Scheme のような言語でのみ可能です。たとえば、Java で遅延関数型プログラミングを学習することは、そのためのライブラリはありますが、良い考えではありません。
私のお気に入りをいくつか紹介します。
他のヒント
私の見解は次のとおりです。
- 関数型プログラミングとは、データを受け取り、それを操作する関数を作成することを意味します。関数を組み立てることによって大規模なアプリケーションを構築します。
- オブジェクト指向プログラミングは、データとその演算子を単一のコンポーネントにカプセル化し、メンタル モデルに適切にマッピングします。連携するオブジェクトから大規模なアプリケーションを構築します。
- 宣言型プログラミング (SQL など) は、何を行うのか、どのように行うのかを分離します。リレーショナル データベースに何を実行させたいかを指示し、操作はクエリ エンジンに任せます。
あなたが考えなければならない別の方法はかなりあるとどのような行為が行わどのオブジェクト尋ねるよりも、問題を分析する際、あなたは全体の要件を開始し、前記する必要があるものを頼むこと?
それから、あなたが選択するか、ドメイン固有言語(DSL)を設計し、その言語で、あなたの問題を述べています。
そのリンクは、動的に変化するダイアログのユーザインターフェースを記述するために特定の言語を説明します。その実装は、特定の制御構造、差動の実行に依存します。何それが実現すると、エラーを符号化するため、より少ないチャンスでソースコード内の大きさの減少、の順です。これらの貯蓄は、UIは、より洗練された作りに費やすことができます。
問題の他の種類については、他の制御構造が適切であるが、はるかに小さいソースコードを作り、よく選ばれたDSLを通じて作業の概念は、より容易に変更、及びより少ないエラーが発生しやすい、一般的なアプローチです。
私は関数型プログラミングとOOPのパラダイムが最高の彼らは最高の表現であるために問題の種類を識別することによって評価されると思います。多くの場合、これらのパラダイムは、単純ではなく、彼らが対処する問題のスペースでそれらを分類するよりも、bandwagonsとなり、硬化オールズとして宣伝されています。