プロトタイプベースの OO には、クラスベースの OO と比べてどのような利点がありますか?

StackOverflow https://stackoverflow.com/questions/879061

質問

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

Sun がいくつかの研究を行ったことは知っています。 自己 - プロトタイプベースのOOに関する他の知識源はありますか?できれば独学でアクセスできるもの。

出版された論文が掲載されている本を見つけました。 プロトタイプベースのプログラミング:概念、言語、アプリケーション

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

--

そこで、最も得られた答えに賞金を与えました。それでも、本当に満足しているわけではありません。もっと技術的な答えが聞きたかったです。たぶん私は自分自身をうまく説明できませんでした。

役に立ちましたか?

解決

プロトタイプ継承の利点は、プロトタイプ チェーンが簡単に操作できるため、簡単な方法で派手なメタプログラミングが可能になる可能性があることです。メタプログラミングは 99% の確率で間違った答えとなるため、これはかなり学術的な利点です。たとえば、オフライン時のローカル SQLite バッキングとオンライン時のプロトタイプ スワッピングを介した REST ベースのサーバー ストアの間で透過的に切り替える特別な DSL を備えた Javascript Key-Value Observer スタイルのデータ操作レイヤーを使用できます。これが最善の方法かどうかはわかりませんが、今更思いつく限りこれが最善の方法です。この種の間接指定は、複数のレイヤーで実行し始めるとデバッグするのが地獄になるため、一般にプロジェクト コードで実行したい種類の処理ではありませんが、ライブラリに保存しておくと悪くありません。

もう 1 つのあまり役に立たない利点は、独自のクラス システムを設計できることです。あまり役に立たないと言うのは、多かれ少なかれすべての JavaScript ライブラリが、「クラス」の組み立て方に関して独自のわずかに互換性のないアプローチを採用しているためです。

継承モデルとそのモデルに実装されている言語を混同して返信している人がたくさんいます。JavaScript が動的で型付けが弱いため、ツール化が難しいという事実は、JavaScript がプロトタイプ言語であることとは何の関係もありません。

他のヒント

あなたがその人気のための説明として、それぞれの長所/短所を指摘するために誰かを探しているなら、私はあなたが技術に何らかの理由で非常に一般的である誤謬のために落下していると思います - 人気が何かにを持っていること品質のいくつかの絶対的な基準で行う。

真実は多くの味気ないです - 確か、人々はそれが企業に首尾よく使用されています知っている作り、教えて - Javaは、古典的なOOを使用し、Sunは数百万ドルを費やし、非常に長い時間は、Javaの人気を構築するため、クラスベースのオブジェクト指向が人気です大学では、高校のAPテストに広くます。

原型/古典OOあなたのアイデアを整理するだけで、さまざまな方法があります。あなたはどちらかのネイティブでサポートされていない言語の1を実装することができます( Pythonの Javaは気にしてい、上と JavaScriptをする反対側)。

古典OOでは、あなたのオブジェクトのクラスの抽象階層を定義し、実際にそれらのクラスのインスタンスで動作します。原型継承では、オブジェクトインスタンスの階層を作成します。私はそれが両方のキャンプで少し異端かもしれないと想像が、私は次の2つを混在させることができなかった理由が表示されない...

私はこのための正確な原因を知っているが、ここで私の理由がありません。

私は、これは主張だと思う静的対動的なと同じですが、クラスがオブジェクトから期待するかを知るために簡単に使用できるオブジェクトの静的な定義であり、それはまた、適切なインテリセンスサポートを持っている言語をツーリングに役立ちますおよびドキュメントを使用すると、簡単にオブジェクト内の別のメンバーとメソッドが何であるかを知ることができるので、他のものは、オブジェクトに表示されませんクラスのプライベートメンバを宣言する能力を有するの異なるパラダイムがあり、これを行うことができませんプロトタイプのパラダイムます。

プロトタイプパラダイムは、いいですが、それはツーリング難しくなるオブジェクトのメソッドとメンバーに関する情報を提供するための能力を欠いている、そしてそれはまた、動的型プログラミングのためのより理にかなっている。

この質問は、私は戻って、概念上の元の論文のいくつかを読んで興味をそそら私を持っていました。 Smalltalkの世界では1980年代半ばに始まっているように見えますが、最終的には自己での設立主体の一つとなりました。ずっと後Javascriptがまたそれを採用しています。

論文に出すの引数は、学ぶことが容易であるということです。技術的な利点は、学習以外の提案ん本当にあります。論文のすべては、それは、クラスベースの言語と同じくらいの表現が、学ぶことは非常に簡単である方法を説明します。人々は自然に具体的なやり方ではなく、抽象的に物事を考えます。私たちは動物園ではなく、一般的な「象」で見た象を考えます。私たちは、他の象を見たとき、我々は最初のものとの違いとして、それらを分類します。プロトタイプベース言語は、この考え方を容易にします。差によって、プログラミングと考えてます。

は十分な理由が言語でそれを使用することですか?おそらく。アイデアは、最初の浸透始めてから25年の間に、私はクラスベースのオブジェクト指向のような抽象化の概念が学ぶためのほとんどの人々のためにあまりにもハードされていないことを主張するだろう。一方、おそらくより簡単であり、これはそれを達成する方法であってもよい(JavaScriptなどの)ブルーカラープログラミング言語が必要とされている。

興味のある方

は、と自己については、この論文を開始する可能性があります。

私は(プロトタイプ宣言)言語があなたに与え差がパワーダイナミックであると思います。 Javascriptが、同じようなLISPは、プログラマにはほぼ無限の力を与えます。この電力は、唯一のプログラマの責任と彼の自信のレベルによって制限されます。型なし対静的型付けと同じ - だから、議論がそのまま同じくらい古いです。あなたはプログラミングのパワーと自己規律を考えると十分強い - 試作したスタイルのために行く。

1つの有名なことわざを言い換えます:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top