web-dev-qa-db-ja.com

「純粋な」オブジェクト指向言語の非純粋なオブジェクト指向言語に対する利点は何ですか?

私の最初のプログラミング言語はC++です。 C++はマルチパラダイムプログラミング言語です。 C++がサポートするパラダイムの1つは、オブジェクト指向プログラミングです。 C++で例示されているように、OOPの一般的なアイデアと利点が得られたと言いたいです。

私は最近Android Studioでプロジェクトの作成を開始しました。言語の1つAndroid StudioはJavaをサポートしています。Javaは「純粋な」オブジェクト指向プログラミング言語。Pureは、Javaサポートされているプリミティブデータ型のため、恐ろしい引用符で囲まれています。

私の質問はなぜJava go full OOP where where C++ does not need to go to get toかけてただし、Javaがそれを行うのには、特定の理由があると確信しています。すべてがオブジェクトである場合、すべてをpublic、protectedなどとして宣言する必要があります。すべてがゆるく使用。

3
FernandoH-G

実際、JavaはC++よりもオブジェクト指向です。

  • Javaのオブジェクトモデルは、基盤となるメモリモデルから独立しています。
  • 一部のC++オブジェクト指向機能は、基礎となるメモリモデルを理解する必要があります。たとえば、オブジェクトを動的に作成/削除するには、ポインタまたはスマートポインタが必要であり、したがって、オブジェクトのアドレスとオブジェクト自体の間に違いが生じます。また、C++では、どのクラスからも独立したコードを作成できます。

しかし、挑発的にしましょう:Javaは純粋なオブジェクト指向言語ではありません:

  • すべてがJavaのオブジェクトであるとは限りません。基本型 int などはオブジェクトとして扱われず、Objectから継承されません。これを実現するには、Integerクラスラッパーを使用する必要があります。
  • 静的メソッド はクラスで定義できますが、特定のオブジェクトにバインドされていません。この機能により、Javaはオブジェクト指向言語よりもクラス指向言語になります。

増加したオブジェクト指向には、いくつかの利点があります。

  • 移植性の向上(つまり、抽象オブジェクトモデルに依存するだけ)。
  • 言語構造の一貫性(すべてがオブジェクトです)。

多くの純粋なOO言語が世に出ているかどうかはわかりません。 Smalltalk は良い候補です。しかし、パラダイムシフトが必要なため、読みにくいコード。

結局のところ、OOは酸素(O like)のようなものです:適切な量で新鮮な空気を作り、複雑な生活を可能にします。純粋な濃度では、他の有用なものから空気を奪います。これは確かに説明に貢献しますマルチパラダイム言語の現在の優位性。

5
Christophe

パラダイムの「純粋な」言語の利点は、(理想的には)パラダイムに従うことを思い出す必要がないことです。そうしないと、この言語では何もできません。

たとえば、Javaは「純粋な」構造言語です。これは、gotoがないことを示すための空想的な方法です。代わりに、while、do while、for、break、continueがあります。None gotoを使用している場合に必要なのは、それを「純粋」にする言語で実行できないことです。

それでは、オブジェクト指向言語の場合はどうでしょうか。プリミティブ。言語を純粋にオブジェクト指向にしたい場合、すべてがオブジェクトでなければなりません。プリミティブはありません。

あなたがそれが不満だと思っても私はあなたを責めません。 OOPの最大の機能は多相メッセージパッシングですが、プリミティブの欠如は、言語を考慮する必要があるものです 'pure' OO

悲しいことに、これは「純粋」であってもOOP言語はOOの最高の機能を使用するように強制していません。それらは、OOP =強制できる機能。

6
candied_orange

言語設計における重要な考慮事項は複雑さです。言語にはいくつの機能がありますか?学ぶのはどれくらい難しいですか?機能の数を減らすことにより、通常は言語を学習しやすくします。

単一のパラダイムに従うことで、機能を削除できます。

次に、プログラムの設計があります。プログラマーとして、プログラムの構成方法を考える必要があります。プログラミング言語によって構造に多くの柔軟性がもたらされる場合、最終的にはより良い設計に到達する可能性がありますが、より多くの可能性を検討する必要もあります。より制約のある言語で作業すると、多くの場合、生産性が向上します(場合によってはそうなることもあります)。より柔軟な言語で実現できるほど設計が最適ではない場合でも、より早く到着するからです。

単一のパラダイムに従って、アプリケーション設計プロセスを合理化します。

結果として、アプリケーション設計の可能性が少ない場合、見慣れないコードベースに遭遇した場合、その設計の理解が容易になるはずです。これにより、開発チームに新しいプログラマーを紹介するのが簡単になります。

単一のパラダイムに従うことで、デザインスペースが狭くなり、新しいチームメンバーのオンボーディングが容易になります。

2
Sebastian Redl

JavaおよびC++の場合、C++はCに基づいていたため、OO以外のすべてのものが無料でそこにありました。それを削除すると、時間と費用がかかり、多くのことになります。ソフトウェアをCからC++に移動するのが難しくなります。

Javaの場合、非OOコードを機能させるには、言語、コンパイラ、仮想マシンに追加の作業を追加する必要があったでしょう。 JNIは非OOの一種であり、後で追加されただけです。

0
gnasher729