webentwicklung-frage-antwort-db.com.de

Kernunterschied zwischen objektorientierter und objektbasierter Sprache

Ich möchte wissen, was der Kernunterschied zwischen ist

Objektorientierte und objektbasierte Sprachen

Ich habe viele Beiträge gelesen, von denen alle zwei Dinge sagen

  1. Objektorientierte Sprache unterstützt alle Funktionen von OOPs, und objektbasierte Sprache unterstützt nicht alle Funktionen von OOPs wie Polymorphismus und Vererbung.

  2. Sie geben ein Beispiel für Javascript als objektbasiert und Java als objektorientiert

Gefällt mir diesem Beitrag von stackoverflow

Unterschied zwischen objektorientierter und objektbasierter Sprache

Aber ich möchte wissen, was der Kernunterschied zwischen beiden Konzepten ist, unabhängig von der Sprache.

Habe die Antwort bekommen

Endlich habe ich das Ding

dank Matías Fidemraizer

Antwort, die nicht von irgendeiner Sprache abhängig ist, nicht von irgendeinem Merkmal, der Kernunterschied, auf den ich mich freue

Die Sprache, die selbst Objekte enthält, wird als objektbasierte Sprache bezeichnet, und die Sprache mit den folgenden objektorientierten Konzepten wird als objektorientierte Sprache bezeichnet

28
user2164685

JavaScript ist eine prototyporientierte Sprache. 

Es kann tatsächliche Objekte aus einer Konstruktorfunktion erstellen und hat fast alle Funktionen, die jedes Objekt haben könnte:

  • Konstrukteur.
  • Methoden (d. H. Funktionen in JavaScript).
  • Eigenschaften (seit ECMA-Script 5 "Getter/Setter").
  • Instanzen.

In JavaScript hat jedes Objekt einen Prototyp, einschließlich Funktionen. Der Prototyp selbst ist eine rudimentäre Methode, um object-Mitglieder zu jeder neu erstellten Instanz des gesamten Objekts hinzuzufügen. 

var constructor = function() { };
constructor.prototype.text = "hello world";

alert(new constructor().text); // This alerts hello world

Warum ist JavaScript keine objektorientierte Programmiersprache (Scripting)? Weil es keine Funktion hat, die den Anforderungen der Definition der objektorientierten Programmierung entspricht:

  • Polymorphismus : Nein. Sie können das Verhalten eines Prototypmitglieds ändern. Dies ist jedoch nur die Wiederverwendung des Bezeichners. Sie können nicht auf die vorherige Implementierung des Members in einem Pseudo-abgeleiteten Objekt zugreifen.
  • Vererbung : Überhaupt nicht. Möglicherweise ist die Prototypkette mit Vererbung vergleichbar, aber JavaScript (ECMA-Script 5.x oder frühere Versionen) hat keine auf Syntax basierende Vererbung wie andere OOP-basierte Sprachen (dh Java, C #, Ruby, Python, VisualBasic.NET, ...). ).
  • Verkapselung . Ja, natürlich, aber es gibt keine Möglichkeit, tatsächliche private oder interne Objektmitglieder zu erstellen.

Vielleicht habe ich vergessen, ein anderes Detail zu erwähnen, aber ich glaube wirklich, dass dies eine gute Zusammenfassung ist.

Update und Zusammenfassung

Der Hauptunterschied besteht darin, dass eine objektorientierte Programmiersprache die Merkmale aufweist, die ein objektorientiertes Paradigma aufweisen muss, um als objektorientierte Programmiersprache betrachtet zu werden. Daher ist JavaScript fürs Erste keine objektorientierte Programmiersprache, da es an Polymorphismus und Vererbung mangelt.

Update: Verändert ES2015 und höher die Situation?

Ästhetisch gesehen, ja, ES2015 und höher hat eine wesentliche Verbesserung, die eine objektorientierte Programmierung nicht vollständig, sondern näher betrachtet: syntaktischer Zucker, um in die Oberklasse zu rufen.

Zum Beispiel:

class A {
     doStuff() {
         console.log("hello world");
     }
}

class B extends A {
     doStuff() {
         super.doStuff();
         console.log("...and goodbye!");
     }
}

Dies ist Polymorphismus. Eine spezialisiertere Klasse kann ihre Basisklasse überschreiben, um ein Funktionsverhalten vollständig zu ändern oder das zu tun, was die Basis bereits getan hat, indem sie der Funktion neuen Code hinzufügt.

BTW, ES2015 und höher weisen noch keine echte Einkapselung auf: Wo sind hier Zugriffsmodifizierer wie private oder public? Nirgends.

Und am Ende des Tages implementieren ES2015 und höher klassenbasierte OOP, aber es ist immer noch eine syntaktische Zuckerschicht auf ECMAScript 5.x ... Der obige Code funktioniert immer noch mit Prototypen unter den Hauben und so weiter funktioniert genauso, als ob Sie es in ECMAScript 5.x codieren würden:

function A() {
}

A.prototype.doStuff = function() {
    console.log("hello world");
};

function B() {
}

B.prototype = Object.create(A.prototype);
B.prototype.doStuff = function() {
    A.prototype.doStuff.call(this);
    console.log("...and goodbye!");
};

Hoffen wir, dass ich diese Antwort erneut aktualisieren muss, da ES2020 bereits Zugriffsmodifizierer vorgeschlagen hat und wir JavaScript in einer anderen Sprache betrachten können, die die objektorientierte Programmierung vollständig unterstützt!

21

Objektbasiert Sprachen umfassen grundsätzlich jede Sprache, die die integrierte Fähigkeit zum einfachen Erstellen und Verwenden von Objekten bietet. Es gibt ein Hauptkriterium:

  • Kapselung. Objects ist eine API zugeordnet, die normalerweise so ist, dass Sie eher mit dem Objekt arbeiten, indem Sie sagen, was zu tun ist, als indem Sie eine Funktion darauf ausführen.

    Die meisten objektbasierten Sprachen definieren Objekte anhand von "Klassen", bei denen es sich im Wesentlichen um Entwürfe für ein Objekt handelt. Die Klasse legt die interne Struktur des Objekts fest und definiert die API.

    Dies ist jedoch nicht der einzige Weg. In JavaScript zum Beispiel haben Objekte nicht wirklich "Klassen". Jedes Objekt kann beliebige Eigenschaften haben. Und da Funktionen in JavaScript erstklassige Werte sind, können sie als Eigenschaften für das Objekt festgelegt werden und als API des Objekts dienen.

Was objektbasierte, aber nicht objektorientierte Sprachen angeht, wäre Visual Basic ein gutes Beispiel (nicht das .net-Material; ich spreche von VB6 und VBA). Klassen existieren, können aber nicht voneinander erben.

Objektorientiert Sprachen sind objektbasierte Sprachen, die einen Schritt weiter gehen. Sie haben eine integrierte Unterstützung für die beiden anderen Säulen der OOP:

  • Vererbung. Objekte müssen die Fähigkeit besitzen, Spezialisierungen eines anderen Objektes zu sein (und als solche angesehen zu werden). Dies bedeutet zum Beispiel, "Hund" als "Tier, das Stöcke bellen und Stöcke holen kann" definieren zu können.

    In modernen Sprachen hat es normalerweise die Form eines class eines Objekts, das von einem class eines anderen Objekts erbt. Dies ist jedoch keine Anforderung; Im Gegensatz zu dem, was manche Leute Ihnen sagen wollen, erfordert die Definition von OOP überhaupt keine Klassen.

  • Polymorphismus. Code muss in der Lage sein, ein Objekt zu verwenden, ohne zu wissen, um welche Art es sich handelt.

    Die meisten Sprachen (insbesondere statisch typisierte) definieren Polymorphismus in Bezug auf Klassen und Vererbung. Wenn Sie über eine Klasse B verfügen, die von A erbt, kann Code, der einen Verweis auf ein A erfordert, stattdessen ein B annehmen, nicht jedoch eine Klasse A, die nicht mit A zusammenhängt. Java hat auch das Schlüsselwort interface, mit dem Sie definieren können eine Reihe von Verhaltensweisen, die eine Klasse implementieren muss. Jedes Objekt, dessen Klasse explizit implements X und somit die an der Schnittstelle X definierten Funktionen implementiert, gilt als Instanz des Typs X.

     Andere Sprachen, wie z. B. JavaScript, lassen Sie jedes beliebige Objekt passieren. Solange das Objekt die richtige Schnittstelle bietet, ist es egal, um welche Art von Objekt es sich handelt. Dies wird als "Enten-Typisierung" bezeichnet und ist fast die reinste Form von Polymorphismus, die es gibt.

16
cHao

Das Verwenden von Objekten bedeutet nicht, dass Sie OOP ausführen, auch wenn Sie in einer vollständigen OO - Sprache keine OO - Techniken implementieren.

4
LarrySTS

grausam ...

  • objektorientiert: unterstützt Einkapselung, Vererbung, Polymorphie
  • objektbasiert: unterstützt die Kapselung

Wikipedia - Objektbasierte Sprache

0
dthal

OOP und OBP sind verschiedene Arten von Programmiersprachen.

OOP: folgt Polymorphismus, Vererbung und Einkapselung (PIE). 

  • Beispiele : Java, .Net so weiter. OOP ist neu im Vergleich zu OBP

OBP: folgt Polymorphismus und Verkapselung. 

  • Beispiele : Ada, Visual Basic (VB) und Fortran 90. OBP ist alt
0
Premraj

Es gibt vier Hauptelemente, denen eine Programmiersprache entsprechen muss, um eine echte objektorientierte Sprache zu sein. Dies sind: Abstraktion, Verkapselung, Modularität und Hierarchie.

Wir können jedoch ein Sprachobjekt basierend aufrufen, wenn dieses die ersten dort vorhandenen Elemente unterstützt. Sobald eine Programmiersprache das Konzept von Object unterstützt, unterstützt sie inhärent die ersten drei Elemente, da sie ein inhärentes Merkmal eines Objekts sind. 

JavaScript als Sprache kann nicht als objektorientierte, sondern als objektbasierte Sprache bezeichnet werden, da Hierarchie (insbesondere Vererbung) nicht unterstützt wird.

0
Arnab