ホームページ  >  記事  >  マルチパラダイムプログラミング言語とは何ですか?

マルチパラダイムプログラミング言語とは何ですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-12-07 14:25:213811ブラウズ

マルチパラダイム プログラミング言語には、1. ソフトウェアの再利用性、柔軟性、拡張性を向上させるオブジェクト指向プログラミング、2. 関数型プログラミング、コア プログラミング言語として数学関数を使用するプログラミング パラダイムが含まれます。モデリング ; 3. 汎用プログラミングは、より高いレベルの抽象化を提供します。

マルチパラダイムプログラミング言語とは何ですか?

#この記事の動作環境: Windows 7 システム、Dell G3 コンピューター。

マルチパラダイム プログラミング言語は次のとおりです:

概要:

この記事では主に、オブジェクト指向プログラミングと関数型プログラミングという 3 つのプログラミング パラダイムについて説明します。プログラミング 、汎用プログラミングの概念

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

プログラミング パラダイムは、プログラミング言語の背後にある考え方です。プログラムをどのように構築して実行すべきかについてのプログラム設計者の見解を表します。一般的なプログラミング パラダイムには、手続き型、オブジェクト指向、関数型、汎用プログラミングなどが含まれます。

一部のプログラミング言語は、特定のパラダイム向けに特別に設計されています。たとえば、C 言語は手続き型プログラミング言語です。Smalltalk と Java は比較的純粋なオブジェクト指向プログラミング言語です。Haskell は純粋な関数型プログラミング言語です。また、一部のプログラミング言語とプログラミング パラダイムの関係は 1 対 1 ではなく、たとえば、Python、Scala、Groovy はいずれもオブジェクト指向プログラミングと関数型プログラミングをある程度サポートしています。 C は、マルチパラダイム プログラミング言語の成功例です。 C は、C 言語と同じ手続き型プログラミング パラダイムをサポートしており、オブジェクト指向プログラミング パラダイムもサポートしています。STL (標準テンプレート ライブラリ) により、C は汎用プログラミング機能を持つことができます。複数のパラダイムをサポートしていることが、C が今日でもこれほど強い活力を持っている理由の 1 つである可能性があります。

Swift は、オブジェクト指向プログラミング パラダイム、関数型プログラミング パラダイム、および汎用プログラミングをサポートする典型的なマルチパラダイム プログラミング言語です。 Swift による複数のプログラミング パラダイムのサポートは、その作成目標によって決まります。 Swift の本来の目的は、実用的な産業言語を提供することでした。 Haskell のような大学や研究機関発のアカデミックなプログラミング言語とは異なります。 Apple が Swift を立ち上げたとき、明確なビジネス目的がありました: Mac OS および iOS システムの主要なプログラミング言語である Objective-C は時代遅れになりました。Swift によって、Apple システムの開発者はより最新のプログラミング言語を使用できるようになり、それによって Apple の健全性が促進されます。エコシステム全体の発展。

Swift の設計と開発はすべて、「実用的な産業言語」という目標を反映しています。このため、Swift は極端な言語実験を行うことはできず、合理的に現実と向き合った上で慎重にブレークスルーを模索する必要があります。これにより、Swift は歴史的な遺産を継承し、今日のほとんどのプログラマーの実際的なニーズに対応し、同時に将来に向けて発展する必要があることが決まりました。

1. オブジェクト指向 - レガシーの継承

オブジェクト指向プログラミングは、プログラムの基本単位としてオブジェクトを使用し、その中にプログラムとデータをカプセル化して改善します。ソフトウェアの再利用性、柔軟性と拡張性。

オブジェクト指向プログラミングの中心的な概念:

  • ポリモーフィズムとは、継承によって生成されたさまざまな関連クラスを指し、そのオブジェクトは同じメッセージに対して異なる応答をします。

  • ##継承では、クラスに「サブクラス」が存在する場合があります。サブクラスは、元のクラス (親クラスと呼ばれる) よりも具体的です。

  • カプセル化、オブジェクト指向プログラミングでは、メッセージを使用する代わりに、特定のメソッドの特定の実行ステップが隠蔽されます。メッセージを配信します。

オブジェクト指向プログラミング言語では、オブジェクトはプログラムの基本単位を構築するために使用されます。ポリモーフィズムはより高度な抽象化機能を提供し、より一般的なプログラムを設計できるようになります。継承はコードを再利用する方法を提供します。カプセル化は、他のコードを使用するためのより便利で安全なメカニズムを提供します。

ほとんどのプログラマが使用している言語は、依然としてオブジェクト指向プログラミング言語です。最も人気のある最新のプログラミング言語では、オブジェクトを作成できます。ソフトウェア モデルは、オブジェクト指向プログラミング言語を使用して簡単に構築できます。オブジェクトはクラスであるため、現実世界のすべての物や概念に簡単に関連付けることができます。しかし、プログラミングを実践してみると、すべてがオブジェクトになることが良いことではないことがわかります。 Java での不十分な例を挙げると、Java ではオブジェクトだけをパラメーターとして関数に渡すことができます (もちろんプリミティブ型も)。したがって、関数を別の関数に渡すには、その関数をオブジェクト (通常は匿名クラス) でラップする必要があります。このクラスには他の目的はなく、Java のすべてオブジェクト設計を満足させるためだけであるためです。

Java には純粋なオブジェクト指向の概念があります。設計の当初から、すべてがオブジェクトである純粋なオブジェクト モデルで世界をモデル化することが望まれていました。しかし今では、オブジェクト以外のものが Java に追加されています。クロージャは関数型プログラミングの第 1 レベル関数を取得するために導入され、ジェネリックはパラメータ化された型を取得するために導入されました。これは、世界が非常に豊かで多様であるため、単一のモデルを使用してモデル化することは成功しないことを示唆している可能性があります。

2. 関数型プログラミング - 開発

関数型プログラミングは、コア プログラミング言語モデリングとして数学関数を使用するプログラミング パラダイムです。コンピューターの操作を数学的な関数の計算として扱い、プログラムの状態や可変オブジェクトの使用を回避します。

関数型プログラミングには 2 つの主要なアイデアがあります:

  • プログラミング言語モデリングの中核として関数を使用する;

  • 状態と可変性を避けてください。

関数は関数型プログラミングの基礎です。関数型プログラミング言語のコードは関数で構成されます。関数型言語を記述するプロセスは、関数を設計することです。大規模なプログラムは数千の関数で構成されており、これらの関数を効率的に組み合わせる必要があります。関数型プログラミング言語は、状態や可変オブジェクトを回避しようとします。可変状態が存在しないため、関数型言語の関数は純粋な関数になります。純粋な関数はモジュール化が容易で、理解しやすく、再利用しやすいです。

関数型プログラミング言語は、いくつかの便利なプログラミング ツールも生成しています:

  • 第一レベル関数、クロージャ;

  • カリー関数;

  • 遅延評価。

これらについては後続の章で説明します。これらのプログラミング ツールは、他のプログラミング言語でも登場することが増えています。

関数型プログラミング言語は新しいものではなく、その歴史はオブジェクト指向プログラミングと同じくらい長いです。 LISP は 1958 年に作成された最古の関数型プログラミング言語です。 C言語よりも古い言語です。しかし、関数型プログラミングのアイデアが徐々に真剣に受け止められるようになったのはつい最近のことです。新しく発明されたほぼすべてのプログラミング言語は、多かれ少なかれ関数型プログラミングの考え方の影響を受けています。 Python、Scala、Groovy、および Swift にはすべて、第 1 レベルの関数とクロージャがあります。これにより、関数を別の関数に直接渡すことができ、また、その関数を戻り値の形式で別の関数から返すこともできます。状態を排除し、不変性を提供する利点はますます受け入れられてきており、Scala、Groovy、Swift はいずれも、関数型スタイルに近いコードの作成をサポートする不変オブジェクトを宣言するための便利なメソッドを提供しています。

関数型プログラミング言語には利点があり、将来的には重要なプログラミング パラダイムになる可能性があります。ただし、関数型プログラミング言語の重要性は、他のプログラミング言語の開発により反映される可能性があります。将来的には、主に関数型プログラミングのパラダイムに基づいて設計されたプログラミング言語が主流のプログラミング言語になることは難しいかもしれません。単一のプログラミング パラダイム (オブジェクト指向) に基づいて構築された Java のようなプログラミング言語が主流になる可能性はほとんどありません。 Haskell のような純粋関数型プログラミング言語の追求は、学術的な言語実験に近いかもしれません。

前のセクションで述べた理由を繰り返しますが、世界は非常に豊かでカラフルであるため、単一のモデルを使用して世界をモデル化することは成功しません。

オブジェクト指向と関数型プログラミング

現在人気のある言語を言語パラダイムに従って分類すると。オブジェクト指向プログラミング言語のサポートは、最も長いキューになるはずです。人気のある最新のプログラミング言語のほとんどはオブジェクト指向であり、すべてオブジェクトを作成できます。しかし同時に、Python、Scala、さらには Java などの人気のあるプログラミング言語のいくつかが、多かれ少なかれ関数型プログラミング言語の影響を受けていることがわかります。これらはすべて関数型プログラミングの概念を導入しており、関数型スタイルのコードをある程度記述できるようになります。

オブジェクト指向プログラミング言語に慣れた後、関数型プログラミング言語に触れると新鮮に感じることが多く、関数型言語は節約するのに良い方法だと漠然と感じることもあります。世界。それでは、関数型プログラミング言語に完全に切り替える必要があるのでしょうか? Haskell を使って世界を救いましょう。

オブジェクト指向プログラミング言語を大規模に実践した後、私たちはその欠点をより深く理解できるようになりました (たとえば、マルチスレッド環境でソフトウェア アプリケーションを作成するのは難しい、継承は良くありません)コードを再利用するための方法)。関数型言語には多くの利点があり、その一部はオブジェクト指向言語の問題を解決できます (純粋関数はマルチスレッド環境に非常に適しており、純粋関数は本質的にモジュール化されており、コードの再利用に非常に適しています)。ただし、関数型プログラミングにも特定の問題が発生する可能性があります。これらの問題は、大規模な業界での実践を経て初めて明らかになる可能性があります。オブジェクトのみの観点から世界をモデル化するのは難しいことがわかっています。そうなると、数学モデルで世界をモデル化することはこれ以上に良いことではないかもしれません。確かなことは、彼らは皆、それぞれが得意とする分野や環境を持っているということです。すべての問題を解決できるプログラミング パラダイムはまだありません。

より大きな現実は、無数の企業がオブジェクト指向プログラミング言語に巨額の投資を行ってきたということです。オブジェクト指向プログラミングによっていくつかの問題が明らかになったとしても、関数型プログラミングはこれらの問題に対する多くの解決策を示してきました。問題の利点それは、賢明な人であれば、オブジェクト指向プログラミングをすぐに放棄したり、完全かつ包括的に関数型プログラミング言語に切り替えることはできませんし、またできないということです。

現実的な選択は、オブジェクト指向プログラミングをサポートし、同時に機能サポートを提供することです。このようにして、オブジェクト指向に慣れているほとんどの場所でオブジェクト指向メソッドを使用できます。また、関数型プログラミングが適しており、関数型プログラミングの考え方と能力がある場合は、関数型プログラミングの手法を使用して生産性を向上させることができます。

3. 汎用プログラミング - 美しい装飾

ジェネリック プログラミングも興味深いトピックです。ジェネリックは、プログラミング言語のより高いレベルの抽象化、つまりパラメーター化された型を提供します。つまり、本来ある型に固有なアルゴリズムやクラスの型情報を抽象化することです。この抽象化された概念は、C の STL (Standard Template Library) のテンプレートです。 STL は汎用プログラミングの力を実証し、登場するとすぐに C の強力な武器となりました。 C に加えて、C#、Java、Haskell などのプログラミング言語でもジェネリックスの概念が導入されています。

ジェネリック プログラミングは、もう少しローカルな概念であり、より抽象的な型、つまりパラメーター化された型を処理する方法のみを含みます。これでは、言語の中核となる概念をサポートするには十分ではありません。プログラミング言語が他のプログラミング パラダイムを持たない純粋な汎用プログラミングであるという話は聞きません。しかし、ジェネリックはプログラミング言語の中核を変更しないため、ほとんどの場合、他のプログラミング手法にうまく統合できます。 C、Scala、Haskell などのさまざまなスタイルのプログラミング言語はすべてジェネリックをサポートしています。ジェネリック プログラミングは、より高いレベルの抽象化を提供し、より優れた表現力を意味します。これは、ほとんどのプログラミング言語に適した機能です。

Swift ではジェネリックが広く使用されており、Swift 標準ライブラリの多くはジェネリック コードで構築されています。たとえば、Swift の配列型と辞書型は両方とも汎用セットです。このような例は、Swift のいたるところで見られます。

まとめ

この連載では主にSwiftを例にマルチパラダイムプログラミング言語について解説していきます。この一連の記事は 3 つの部分に分かれており、Swift でサポートされる 3 つのプログラミング パラダイムについて説明します。

  • オブジェクト指向プログラミング パラダイム

  • 関数型プログラミングパラダイム

  • 汎用プログラミング

関連知識の詳細については、FAQ 列をご覧ください。

以上がマルチパラダイムプログラミング言語とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。