44

プロトタイプベースのOOではなく、クラスベースのOOが非常に人気があるのはなぜですか?彼らは学校で後者を教えていますか?Javascriptはプロトタイプベースですが、ほとんどの人は、ほとんどの場合、機能的に、またはクラスベースのシステムをエミュレートしようとするフレームワークを介して使用します。

SunがSelfについて調査したことは知っていますが、プロトタイプベースのooに関する他の知識源はありますか?できれば、自己学習のためにアクセスできるものが望ましい。

出版された論文を含む本を見つけました:プロトタイプベースのプログラミング:概念、言語、およびアプリケーション

誰か読んだことがありますか?

-

それで、私は私に最も与えた答えに報奨金を与えました。それでも、私は本当に満足していません。もっと技術的な答えを聞きたかったのですが。たぶん私は自分自身をうまく説明していませんでした。

4

7 に答える 7

19

人気の理由として、それぞれの長所と短所を指摘してくれる人を探しているなら、何らかの理由でテクノロジーでは非常に一般的な誤解に陥っていると思います-その人気はいくつかの人と関係があります品質の絶対的な尺度。

真実はもっと当たり障りのないものです。クラスベースの OO が人気があるのは、Java が従来の OO を使用しているためです。また、Sun は数百万ドルと非常に長い時間を費やして Java の人気を高めてきました。Java が企業でうまく使用され、大学で広く教えられていることを人々に知ってもらうためです。 、および高校のAPテストについて。

プロトタイプ/クラシック OO は、アイデアを整理するためのさまざまな方法です。ネイティブでサポートされていない言語でいずれかを実装できます ( PythonJavaが思い浮かび、反対側ではJavaScriptが思い浮かびます)。

従来の OO では、オブジェクトのクラスの抽象階層を定義してから、それらのクラスのインスタンスを実際に操作します。プロトタイプ継承では、オブジェクト インスタンスの階層を作成します。どちらの陣営でも少し異端かもしれないとは思いますが、2 つを混ぜてはいけない理由がわかりません...

于 2009-05-20T18:49:50.303 に答える
12

正確な理由はわかりませんが、以下が私の理由です。

この議論は動的対静的と同じだと思います。クラスはオブジェクトの静的定義であり、オブジェクトから何を期待するかを簡単に知ることができます。また、言語が適切なインテリセンスのサポートとドキュメントを持つようにツールするのにも役立ちます。オブジェクトのさまざまなメンバーとメソッドが何であるかを簡単に知ることができます。別のことは、オブジェクトには表示されないクラスでプライベートメンバーを宣言する機能を持つという異なるパラダイムです。これはプロトタイプでは実行できませんパラダイム。

プロトタイプ パラダイムは優れていますが、オブジェクト内のメソッドとメンバーに関する情報を提供する機能が不足しているため、ツールが難しくなり、動的型付けプログラミングにも適しています。

于 2009-05-18T18:22:53.063 に答える
11

この質問に興味をそそられたので、戻ってコンセプトに関する元の論文をいくつか読みました。1980 年代半ばに Smalltalk の世界で始まったようですが、最終的にはSelfの創設者の 1 つになりました。ずっと後にJavascriptもそれを採用しました。

論文で発表された議論は、習得が容易だというものです。学習以外に提案されている技術的な利点は実際にはありません。論文はすべて、クラスベースの言語と同じくらい表現力があり、習得がはるかに簡単であることを説明しています. 人は本来、物事を抽象的ではなく具体的​​に考えます。一般的な「ゾウ」ではなく、動物園で見たゾウを思い浮かべます。他のゾウを見ると、最初のゾウとの違いとして分類します。プロトタイプベースの言語は、この考え方を容易にします。微分によるプログラミングと考えてください。

それは言語でそれを使用する十分な理由ですか? 多分。このアイデアが最初に浸透し始めてから 25 年が経ちましたが、クラスベースのオブジェクト指向のような抽象化された概念は、ほとんどの人が習得するのにそれほど難しくはなかったと私は主張します。一方で、より簡単なブルーカラーのプログラミング言語 (Javascript など) が必要になる可能性があり、これはそれを実現する方法になる可能性があります。

興味があれば、自己についてのこの論文から始めてください。

于 2009-10-08T15:05:16.260 に答える
6

http://en.wikipedia.org/wiki/Prototype-based_programming#Criticismはそれを非常によく説明していると思います。

于 2009-05-20T18:29:01.873 に答える
4

プロトタイプの継承に関する別の記事を書きたくないので、以前の記事へのリンクだけを掲載しておきます。これらは非常に長いですが、読む価値があります。

  1. クラシックに対するプロトタイプ継承の利点は?
  2. プロトタイプの継承が重要な理由
于 2013-06-01T13:38:14.433 に答える
3

違いは、動的 (プロトタイプ) 言語が与える力にあると思います。Javascript は、LISP と同じように、プログラマーにほぼ無限の力を与えます。この力は、プログラマーの責任と彼の自信のレベルによってのみ制限されます。したがって、議論はそれと同じくらい古いものです-静的型付けと型なしと同じです。自分のプログラミング能力と自制心が十分にあると考える場合は、プロトタイプ スタイルを選択してください。

ある有名なことわざを言い換えると:

才能は彼ができることを行います (読み: クラスベース)、天才は彼が望むことを行います (読み: プロトタイプベース)。

于 2009-05-21T14:40:22.827 に答える