Was ist der Unterschied zwischen objektorientierten Sprachen und nicht objektorientierten Sprachen?

Lesezeit: 6 Minuten

Benutzer-Avatar
azn_person

Ich habe gehört, dass C eine nicht objektorientierte Sprache und Java eine objektorientierte Sprache ist. Ich habe mich gefragt, was der Unterschied ist?

  • Oh, tut mir leid, ich bin neu hier…

    – azn_person

    12. Dezember 2009 um 21:45 Uhr

  • @azn_person: Sie können die akzeptierte Antwort jederzeit deaktivieren (ohne Ihnen dies vorzuschlagen, nur um Sie darüber zu informieren).

    – JayZeng

    12. Dezember 2009 um 22:02 Uhr

  • Sorry für den Spaß: Der Hauptunterschied sind Objekte 😉

    – Java.ist.für.Desktop

    12. Dezember 2009 um 22:29 Uhr

Wow, eine Menge großer OOP-Begriffe, die mit diesem Typen herumgeworfen werden. Als jemand, der mit prozeduraler Programmierung begonnen hat und jetzt hauptsächlich OOP macht, denke ich konzeptionell über den Unterschied (ohne all die großen Begriffe):

In C gibt es Dinge, die Strukturen genannt werden, die Zustände halten können. Sie scheinen wie Objekte zu sein, zum Beispiel könnten Sie eine Struktur namens Car haben und Instanzen von Cars erstellen und ihre Felder für Marke, Modell und Farbe festlegen. Sie können den Car-Strukturinstanzen jedoch nichts anweisen. Wenn Sie stattdessen Ihr Auto waschen möchten, müssen Sie die Autoinstanz an eine externe Funktion wie diese übergeben:

WashMyCar(myCar);

OOP-Sprachen verwenden ein anderes Konzept als Strukturen, die als Klassen bezeichnet werden, und Objekte sind Instanzen dieser Klassen. Vergessen Sie vorerst diese großen Wörter Vererbung und Polymorphismus (das sind fortgeschrittenere Themen, wenn Sie erst einmal Klassen bekommen). Denken Sie nur an das Beispiel eines Autos. In Java könnten Sie beispielsweise eine Klasse namens Car als solche definieren:

public class Car {
  String make;
  String model;
  String color;
}

Dann erstellen Sie eine Instanz eines Autos wie folgt:

Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";

Dies ist einer Struktur ähnlich. Was OOP nun anders macht, ist, dass Sie die Klassendefinition erweitern können, um Klassenmethoden zu definieren – die den prozeduralen Funktionen ähneln, außer dass sie immer auf einem Objekt arbeiten. Fügen wir also die Waschmethode hinzu:

public class Car {
  String make;
  String model;
  String color;
  String condition;
  void washMe() {
    this.condition = "clean";
  }
  void goOffroad() {
    this.condition = "dirty";
  }
}

Jetzt können Sie dies tun:

Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";

myCar.goOffroad();
System.out.println(myCar.condition); // dirty
myCar.washMe();
System.out.println(myCar.condition); // clean

Hoffentlich hilft dieses Beispiel. OOP (und prozedural) hat natürlich viel mehr zu bieten als dieses einfache Beispiel. Aber der Hauptunterschied besteht darin, Klassen von Objekten zu haben, die ihre eigenen Methoden “besitzen”.

Prozedurale Programmierung und OOP, beides unterschiedliche Programmierungen Paradigmen, sind die sprichwörtlichen Äpfel und Birnen. PP setzt auf “Subroutinen”. OOP sendet „Nachrichten“ an „Objekte“, die den „Zustand“ der Objekte ändern und Nachrichten an andere Objekte senden; Darüber hinaus können die Verhaltensobjekte erweitert werden, wodurch neue Arten von Objekten erstellt werden. Beide beruhen auf Zuweisung und Nebeneffekten. Probleme können in einem Paradigma natürliche Lösungen haben, in einem anderen aber eher barocke Lösungen. Das heißt, ein Problem kann leicht modelliert werden, indem Objekte verwendet werden, die Nachrichten weiterleiten, oder durch Prozeduren.

Programmiersprachen können Paradigmen unterstützen, die über diejenigen hinausgehen, die sie nativ unterstützen, aber es erfordert, dass der Programmierer die notwendigen Strukturen implementiert. Beispielsweise können Sie OOP mit C ausführen; Tatsächlich stützten sich einige OO-Erweiterungen von C auf Präprozessoren, die C-Code als Ausgabe erzeugten.

Während Sie in Ihrem Studium vorankommen, möchten Sie über den anderen hinwegsehen Paradigmenbesonders Funktionale Programmierung. Anschauen würde nicht schaden logische Programmierung (wie durch Prolog veranschaulicht) und Datenfluss-Programmierung (sehen Reine Daten zum Beispiel).

Benutzer-Avatar
PJT

Java ist eine Sprache, die hauptsächlich für objektorientierte Programmierung verwendet wird, und C eine Sprache, die hauptsächlich für prozedural orientierte Programmierung verwendet wird

Dazu gibt es eine tolle Erklärung Wikipedia über prozedurale Programmierung vs. objektorientierte Programmierung:

Vergleich mit objektorientierter Programmierung Der Schwerpunkt der prozeduralen Programmierung liegt darauf, eine Programmieraufgabe in eine Sammlung von Variablen, Datenstrukturen und Unterprogrammen zu zerlegen, während es bei der objektorientierten Programmierung darauf ankommt, eine Programmieraufgabe in Objekte mit jedem “Objekt” zu zerlegen ” Kapselung seiner eigenen Daten und Methoden (Subroutinen). Der wichtigste Unterschied besteht darin, dass während die prozedurale Programmierung Prozeduren verwendet, um mit Datenstrukturen zu arbeiten, die objektorientierte Programmierung die beiden zusammen bündelt, sodass ein „Objekt“ mit seiner „eigenen“ Datenstruktur arbeitet. Die Nomenklatur variiert zwischen den beiden, obwohl sie im Wesentlichen die gleiche Semantik haben: objektorientierte prozedurale Methoden Funktionen Objekte Module Nachricht Argument Attribut Variable

Aber um die Dinge einfacher zu machen, können Sie sich Objekte so vorstellen, wie Sie sich Objekte in der realen Welt vorstellen, wie z. B. ein Auto alle Eigenschaften eines Autos wie andere Objekte wie Fenster und Reifen haben würde.

Ich gebe Ihnen die einfachste und intuitivste Antwort, die Sie bekommen können.

(In Anbetracht Java ist ein Objektorientierte Sprache und C ist ein Verfahrenssprache)

Objektorientierte Sprache

  • Kernkonzept ist Objekte (Stell dir ein Auto vor)
  • Objekte haben Eigenschaften, die sie definieren, sie können konstant sein oder sich ändern (ein Auto ist rot, Modell 2004, und hat einen Tempomat. Es hat derzeit auch 100.000 auf dem Kilometerzähler und 3/4 Tankkraftstoff).
  • Objekten können Nachrichten gesendet werden, die sie betreffen (ein Auto kann von A nach B gefahren werden, ein Auto kann betankt werden)

Verfahrenssprache

  • Kernkonzept ist Prozess (Erwägen Sie eine Online-Bestellung)
  • Damit ein Prozess abgeschlossen werden kann, müssen mehrere Schritte durchlaufen werden (eine Bestellung muss (1) an das Lager gesendet, (2) verpackt und (3) versandt werden)
  • Einer der Schritte kann ein eigener Prozess oder atomar sein

Das objektorientierte Programmierparadigma sagt Ihnen, dass Sie Zustandsvariablen in Entitäten namens „Objekte“ kapseln sollen, die über Nachrichtenübermittlung kommunizieren, meistens implementiert als Funktionen mit einem „besonderen“ this oder self Streit.

Eine objektorientierte Programmiersprache ist eine Sprache, die entwickelt wurde, um die Verwendung des oo-Paradigmas einfach zu machen. Seine Semantik und Syntax sind auf dieses Ziel ausgerichtet. Vererbung (entweder klassenbasiert oder prototypisch) und Subtyp-Polymorphismus sind wichtige Techniken, die das abstrakte Konzept von oo in der Praxis durchführbar machen.

Benutzer-Avatar
Chris Fulstow

Objektorientierte Sprachen basieren auf der Idee von Datenstrukturen, Objekten genannt, die jeweils ihre eigenen Daten und Verhaltensweisen enthalten. Indem Sie diese Objekte kombinieren und miteinander interagieren lassen, können Sie ein Programm entwerfen, das den Bereich des Problems, das Sie zu lösen versuchen, besser widerspiegelt.

Beispielsweise könnten Sie in einer Bankanwendung Objekte haben, die Konten darstellen, die jeweils Daten wie den Kontostand speichern und bestimmte Verhaltensweisen wie Geldüberweisungen implementieren.

In einer traditionelleren Sprache würden Sie Daten und Verhalten an verschiedenen Orten speichern.

Benutzer-Avatar
seh

Abgesehen von dem Versuch, eine Sprache so zu charakterisieren, dass sie im Kern ein bestimmtes Paradigma hat, könnten Sie dieses Papier von William R. Cook nützlich finden: Über das Verständnis der Datenabstraktion, revisited. Es gibt eine Entwurfsversion verfügbar. Es untersucht den Unterschied zwischen abstrakte Datentypen und Objekte — ein Unterschied, den ich nach jahrelanger Beschäftigung mit verschiedenen Programmiersprachen nicht mehr sehen konnte.

Ich habe das Papier über Guy Steeles kürzlich erschienenen Aufsatz gefunden, Warum objektorientierte Sprachen Tail-Calls brauchen.

1188570cookie-checkWas ist der Unterschied zwischen objektorientierten Sprachen und nicht objektorientierten Sprachen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy