Frage

Warum ist Klasse basiert OO so beliebt statt Prototyp basiert OO? Sie lehren sie diese in den Schulen? Obwohl ist Javascript Prototyp basiert sind, können die meisten Menschen verwenden meist funktional, oder die über Frameworks versuchen, eine Klasse-basiertes System zu emulieren.

Ich weiß, dass Sun einige der Forschung hatte auf Selbst - gibt es eine andere Quelle des Wissens über Prototyp basiert oo? vorzugsweise etwas, das zugänglich für Selbst ist gelernt.

fand ich ein Buch, das veröffentlichte Papier enthält: Prototyp-basierte Programmierung: Konzepte, Sprachen und Anwendungen

Hat jemand es lesen?

-

Also gab ich die Prämie für die Antwort, die mich am meisten gab. Trotzdem bin ich nicht wirklich zufrieden. Ich hätte viel mehr techical Antworten hören mag. Vielleicht habe ich mich nicht gut erklären.

War es hilfreich?

Lösung

Der Vorteil der prototypische Vererbung ist, dass es möglicherweise Phantasie metaprogramming auf einfache Art und Weise ermöglicht, weil die Prototypkette leicht manipuliert wird. Dies ist ein eher akademischer Vorteil, weil metaprogramming das falsche Antwort 99% der Zeit ist. Als Beispiel könnten Sie eine Javascript-Schlüsselwert Observer Stil Datenmanipulation Schicht mit einem speziellen DSL haben, die zwischen einer lokalen SQLite Unterstützung, wenn offline und ein REST-basierten Server speichern, wenn online über Prototyp Swapping transparent geschaltet. Ich bin mir nicht sicher, es ist der beste Weg, dies zu tun, aber es ist das Beste, was ich mit dieser spät kommen kann. Es ist nicht das, was Sie in der Regel in Projektcode tun wollen, da diese Art von indirection Hölle Sie zu debuggen ist einmal beginnen, es geht auf mehreren Ebenen bekommen, aber es ist nicht schlecht, wenn man es in einer Bibliothek zu halten.

Eine andere, weniger hilfreich Vorteil ist, dass es Ihnen erlaubt, Ihre eigene Klasse System zu entwerfen. Ich sage weniger hilfreich, da mehr oder weniger alle JavaScript-Bibliotheken, um ihre eigenen leicht inkompatiblen Ansatz haben, wie ‚Klassen‘ zusammengesetzt werden.

in diesem Modell

Es gibt eine Menge Leute antworten, die mit den Sprachen implementiert, um das Vererbungsmodell mischen. Die Tatsache, dass Javascript dynamisch ist und schwach typisierte und somit schwer zu Werkzeug nichts mit dem zu tun hat, es sich um eine prototypische Sprache.

Andere Tipps

Wenn Sie für jemanden freuen, die Vorteile / Nachteile der einzelnen als Erklärung für ihre Popularität, darauf hinzuweisen, ich glaube, Sie für einen Irrtum sind fallen die aus irgendeinem Grunde ist sehr häufig in der Technologie - die Popularität hat etwas zu tun mit etwas absolutes Maß an Qualität.

Die Wahrheit ist viel mehr fad - Klasse basiert OO beliebt, weil Java klassische OO verwendet und Sun verbrachte Millionen Dollar und eine sehr lange Zeit den Aufbau der Popularität von Java - dafür, dass die Menschen wissen, dass es erfolgreich in Unternehmen verwendet wird, gelehrt weit verbreitet in Universitäten und auf High-School-AP-Tests.

Prototypische / klassische OO sind nur verschiedene Möglichkeiten, um Ihre Ideen zu organisieren. Sie können entweder in Sprachen implementieren, die es nicht nativ unterstützt ( Python und Java in den Sinn kommen, und JavaScript auf die andere Seite).

In der klassischen OO Sie eine abstrakte Hierarchie von Klassen für Ihre Objekte definieren und dann tatsächlich arbeiten mit Instanzen dieser Klassen. In prototypische Vererbung Sie eine Hierarchie von Objektinstanzen erstellen. Obwohl ich es auch sein mag ein wenig ketzerisch in beiden Lagern vorstellen, ich sehe keinen Grund, warum Sie nicht mischen die beiden könnte ...

Ich weiß nicht, die genauen Gründe dafür, aber meine Gründe sind hier

Ich denke, dies argumentieren ist die gleiche wie dynamische vs statischen, eine Klasse die statische Definition des Objekts ist, kann diese leicht verwendet werden, zu wissen, was von einem Objekt zu erwarten, es hilft auch, die Sprachen, Werkzeugen richtige Intellisense Unterstützung zu haben und Dokumentation, weil Sie einfach wissen, was sind die verschiedenen Elemente und Methoden in dem Objekt, eine andere Sache ist das unterschiedliche Paradigma mit der Fähigkeit, private Mitglieder in der Klasse zu deklarieren, die nicht auf dem Objekt nicht zeigen, kann dies nicht geschehen im Prototyp-Paradigma.

Der Prototyp Paradigma ist nett, aber es fehlt die Fähigkeit, Informationen über die Methoden und die Mitglieder in dem Objekt für die Bereitstellung, die das Werkzeug erschwert, und es macht auch mehr Sinn für dynamische Typisierung Programmierung.

Diese Frage hatte mich intrigiert so ging ich zurück und einige der Original-Papiere auf dem Konzept lesen. Es scheint in der Mitte der 1980er Jahre in der Smalltalk-Welt begonnen zu haben, aber schließlich wurde eines der Gründungsprinzipien von Selbst . Viel später auch Javascript angenommen.

Das Argument in den Papieren hervorbringen, ist, dass es einfacher ist, zu lernen. Es gibt wirklich keinen technischen Vorteil vorgeschlagen andere als das Lernen. Die Papiere alle erklären, wie es als klassenbasierte Sprache ebenso ausdrucksvoll ist aber viel einfacher zu erlernen. Die Leute denken natürlich über die Dinge in einer konkreten Art und Weise und nicht in der abstrakten. Wir denken an den Elefanten wir im Zoo gesehen, nicht ein generischer „Elefant“. Wenn wir andere Elefanten zu sehen, klassifizieren wir sie als Unterschiede von dem ersten. Ein Prototyp-basierte Sprache, erleichtert dieses Denken. Betrachten Sie es als Programmierung durch Differential.

Ist das ein ausreichender Grund, es in einer Sprache zu bedienen? Vielleicht. In den 25 Jahren seit dem ersten die Idee durchsickert begann, würde ich die abstrahierte Konzepte wie klassenbasierten OO argumentiert auch nicht gewesen sind schwer für die meisten Menschen zu lernen. Auf der anderen Seite vielleicht gibt es einen Bedarf für eine blue-collar-Programmiersprache (wie Javascript), die ist einfacher, und dies kann ein Weg sein, das zu erreichen.

Wenn Sie interessiert sind, können Sie mit diesem Papier über sich selbst beginnen.

Ich möchte wirklich nicht wieder einen anderen Artikel über prototypische Vererbung schreiben, so werde ich Ihnen nur zu meiner früheren Artikel verknüpfen. Wohlgemerkt, sie sind wirklich lang, aber es lohnt sich die Lese:

  1. Vorteile der prototypische Vererbung über klassisch?
  2. Warum Prototypische Vererbung Matters

Ich denke, der Unterschied in der Leistung dynamisch ist (prototypisiert) Sprache gibt Ihnen. Javascript, gleicher wie Lisp, gibt fast unbegrenzte Macht für einen Programmierer. Diese Leistung wird nur durch Programmierer in der Verantwortung und die Höhe seines Selbstvertrauens begrenzt. So ist die Diskussion so alt wie sie ist - wie statische Typisierung vs. typenlos. Wenn Sie Ihre Programmierleistung und Selbstdisziplin betrachten sind stark genug, um - für prototypisiert Stil gehen

.

In Anlehnung an einen berühmten Ausspruch:

Talent tut, was er kann (sprich: klassenbasierten), Genie tut, was er will (sprich: Prototyp-basiert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top