5

私は過去4年間開発者として働いており、その4年前は大学でソフトウェア開発を勉強していました。業界での4年間、私はVB6(冗談でした)でいくつかの作業を行いましたが、そのほとんどはC#/ASP.NETで行われました。この間、私は「オブジェクトを意識した」手続き型パラダイムからオブジェクト指向型パラダイムに移行しました。

最近、他のプログラミングパラダイムに興味があったので、他の開発者に、これらのパラダイム、特にOOPの類似点と相違点について意見を求めたいと思いました。OOPでは、概念間の関係と論理的な相互作用に重点が置かれていることがわかりました。他のパラダイムのためにあなたがしなければならないマインドフレームは何ですか?

4

3 に答える 3

12

プログラミングパラダイムの最も良い説明は、PetervanRoyの作品にあります。特に、Peter VanRoyとSeifHaridiの著書『Concepts、Techniques、and Models of Computer Programming』の中で。(これがコンパニオンウィキです。)CTMは、マルチパラダイム分散Ozプログラミング言語を使用して、すべての主要なプログラミングパラダイムを紹介します。

Peter van Royは、34の主要なパラダイムと、それらの関係およびさまざまな軸上の位置を示すこの素晴らしいポスターも作成しました。ポスターは基本的にCTMの信じられないほど圧縮されたバージョンです。そのポスターのより完全な説明は、G.AssayagとA.Gerzsoによって編集された本「コンピューター音楽のための新しい計算パラダイム」の章として登場した記事「ダミーのためのプログラミングパラダイム:すべてのプログラマーが知っておくべきこと」に含まれています。

いくつかの主要なプログラミングパラダイムを示すもう1つの優れた本は、 HaroldAbelsonとGeraldJaySussmanによるコンピュータープログラムの構造と解釈です。この本は、数十年にわたってMITのCS101の基礎でした。アベルソンとサスマン自身が教えたコースは、1986年のヒューレットパッカードの企業研修で記録されました

CTMとSICPの主な違いは、CTMがそれらをサポートする言語(主に分散Ozだけでなく、他のいくつか)を使用してほとんどの主要なパラダイムを示すことです。SICP OTOHは、それらをネイティブにサポートしない言語(Schemeのサブセット)で実装することにより、それらを示します。十数行のコードでオブジェクト指向が実装されているのを見るのはとても素晴らしいことです。

MITのOpenCourseWareWebサイトで、2005年春のコースのビデオ録画とコース資料を見つけることができます。MITの短命のArsDigita大学プロジェクトからのコースの別の記録。SICPは他の大学でも教えられており、実際、現在バークレーで教えられています。

個人的な話ですが、私自身の経験では、プログラミングパラダイムを本当に理解することは可能です。

  • 一度に1つのパラダイムと
  • パラダイムにあなたを強制する言語で

理想的には、パラダイムを極限まで高める言語を使用します。マルチパラダイム言語では、「ごまかして」、より快適なパラダイムにフォールバックするのは非常に簡単です。そして、パラダイムをライブラリとして使用することは、この種のプログラミング用に特別に設計されたSchemeのような言語でのみ実際に可能です。たとえば、Javaで怠惰な関数型プログラミングを学ぶことは良い考えではありませんが、そのためのライブラリはあります。

これが私のお気に入りのいくつかです:

  • 一般的なオブジェクト指向自己
    • プロトタイプベースのオブジェクト指向:自己
    • クラスベースのオブジェクト指向Newspeak
      • 静的クラスベースのオブジェクト指向Eiffel
    • 多重ディスパッチベースのOOディラン
    • 関数型+オブジェクト指向Scala
  • 関数型プログラミングHaskell
    • 純粋関数型プログラミング:Haskell
      • 怠惰な純粋関数型プログラミング:Haskell
    • 静的関数型プログラミング:Haskell
    • 動的関数型プログラミングClojure
  • 命令型プログラミングLua
  • 並行プログラミング:Clojure
    • メッセージパッシング並行プログラミングErlang
  • メタプログラミングスキーム
  • 言語指向プログラミングIntentional Domain Workbench
于 2010-03-11T17:02:35.233 に答える
1

これが私の見解です:

  • 関数型プログラミングとは、データを取り込んで操作する関数を書くことを意味します。関数を組み立てることにより、大規模なアプリケーションを構築します。
  • オブジェクト指向プログラミングは、データとその演算子を1つのコンポーネントにカプセル化し、メンタルモデルに適切にマッピングします。コラボレーションオブジェクトから大規模なアプリケーションを構築します。
  • 宣言型プログラミング(SQLなど)は、実行されることと実行される方法を分離します。リレーショナルデータベースに何をしたいかを伝え、クエリエンジンに駆動を任せます。
于 2010-03-11T10:56:36.617 に答える
0

このリンクは、私が過去20年間に使用したものを説明しようとしています。それは確かに有用であり、パラダイムとして数えられると思うので、私はそれについて言及します。それを使用するには、特定の方法で考える必要があるからです。

別の考え方として、問題を分析するときは、どのオブジェクトがあり、どのアクションが実行されるかを尋ねるのではなく、全体的な要件から始めて、何を言う必要があるかを尋ねます。

その中から、ドメイン固有言語(DSL)を選択または設計し、その言語で問題を述べます。

このリンクは、動的に変化するダイアログユーザーインターフェイスを記述するための特定の言語を説明しています。その実装は、特定の制御構造である差分実行に依存します。これにより、ソースコードが桁違いに削減され、コーディングエラーが発生する可能性が低くなります。これらの節約は、UIをより洗練されたものにするために費やすことができます。

他の種類の問題については、他の制御構造が適切ですが、適切に選択されたDSLを介して作業し、ソースコードをはるかに小さく、変更しやすく、エラーが発生しにくいという概念が一般的なアプローチです。

関数型プログラミングとOOPのパラダイムは、それらが最良の表現である問題のタイプを特定することによって最もよく評価されると思います。多くの場合、これらのパラダイムは単にバンドワゴンになり、対処する問題空間によって分類するのではなく、すべてを解決するものとして宣伝されます。

于 2010-05-20T01:17:25.507 に答える