Objektorientierte und prozedurale Programmiersprachen - Was ist das und wo bestehen die Unterschiede

3 Antworten

Als prozedurale Programmiersprache (wie Pascal) versteht man den Ablauf: an einen Punkt fängt der Code an und dann wird wie in einem Buch der Code durchgearbeitet. Hierbei ist Code von allen Stellen erreichbar (z.B. siehe Seite 6) und eine Ordnung gibt es kaum.

Als Gegenpol gibt es die objektorientierte Programmiersprache. Um das zu verstehen, muss man das Prinzip verstehen. Nehmen wir einen Apfel. Der Apfel ist ein Objekt im System. Er hat eigenen Code (wie Vergammeln), der von außen nicht erreichbar ist (z.B. von einen anderen Apfel). Zudem beinhaltet er Variablen und Code, der auch von außen erreichbar ist (wie Geschmack, Konsistenz, Zuckergehalt, etc.). Durch diese Strukturierung weiß man immer, was nur für den Apfel ist und was auch andere interrressiert.

Zudem gibt es auch noch das System Ableitungen (auch zu objektorientiert). Der Apfel ist vom Objekt Obst abgeleitet. Vom Obst ist auch die Birne abgeleitet. Apfel und Birne haben direkt nichts miteinander zu tun, nur dass die beiden von Obst abgeleitet sind. Denn dieser beinhaltet alles, was sowohl für den Apfel, als auch für die Birne gilt. Zusätzlich kann aber die Birne extra Informationen enthalten, die der Apfel nicht enthält (z.B. Bauchigkeit).

Insgesammt kann man sich das System der Objektorientierung als bunten Obstsalat vorstellen. Dies mag zwar am Anfang verwirrend klingen, ist aber im Endeffekt sehr nützlich, da alles an der Stelle liegt, wo es gebraucht wird. Zudem bringt dies Ordnung und Übersichtlichkeit in den Code hinein. Als Programmiersprache, wo dies, meiner Meinung nach, am besten umgesetzt ist, kann man C# nennen.

Natürlich kann dir das jetzt alles kompliziert vorkommen - ist es auch, am Anfang. Ich weis nicht wie du bisher programmiert hast, bestimmt prozedural. Und wenn nicht, dann gebe ich dir jetzt ein Beispiel aus dem Legobaukasten, wo jetzt beides umgesetzt ist.

  1. Prozedural: Es wird Schritt für Schritt vorgegeben, wie du Stein für Stein aufbaust und drannsteckst. Eine Grobübersicht hast du nicht (höchstens auf der Verpackung ;) ). Wenn jetzt die 6 Greifarme gebaut werden, dann springst du zu einer bestimmten Stelle in der Anleitung baust ihn, und sprinst zurück an der ersten Stelle und baust weiter. Dies ist der normale logische Ablauf, trägt aber nicht viel zur Übersichtlichkeit bei.

  2. Objektorientiert: Hier geht es zwar so ähnlich, nur baut der Programmierer die Anleitung ganz anders auf. An einer Stelle bestimmst du, wie das Objekt Greifarm gebaut wird. Von außen weis keiner, wie das geht. Aber der Greifarm ist fertig. An einer anderen Stelle definierst du die Ketten, dieser bestimmt auch für sich alleine, wie es aufgebaut wird. Das geht so weiter für alle kleineren Teile. Als nächstes kommen die komplexeren Objekte. So gibt es das Fahrerhaus, dies holt sich die fertigen Objekte (Sitz, Schaltpult, Dach, Tür) und baut dies nach eigenen Regeln auf. Dann gibt es ein Objekt, wie Motorblock. Dies holt sich die Objekte Motor, Getriebe, Steuerung und verbaut die in sich. Nach einer Weile sind alle größeren Objekte fertig. Dann gibt es das komplexe Objekt, das Endprodukt. Dies sammelt alle größeren Zwischenprodukte (Fahrerhaus, Motorblock) und vereint die in sich und verbaut die. Dies mag zwar komplex sein, und Horror für das Kind, weil es ständig in der Anleitung hin und herspringt (es sei den, man ordnet die Objekte nach Bauzeitpunkt). Aber es ist für den Programmier sinnvoll, weil er ständig den Überblick behält.

Ich weis zwar jetzt nicht, ob du das System verstanden hast, aber den Unterschied merkst du, wenn du mal versucht hast, in beiden Systemen zu programmieren.

Ich hoffe der lange Text hat dir geholfen!


BlackSwan9 
Beitragsersteller
 26.06.2014, 14:26

Vielen lieben Dank, dass du das mir so ausführlich erklärt hast. Ich glaube, dass ich mir vieles daraus nehmen kann. :)

0

In objektorientierten Programmiersprachen packst du Eigenschaften (Variablen) und Methoden in Klassen zusammen. Aus diesen Klassen kannst du dann eine Vielzahl an Objekten erstellen.

Beispiel: Die Klasse Punkt stellt einen Punkt in einem zweidimensionalen Koordinatensystem dar. Die Klasse definiert die x- und y- Koordinate. Von dieser Klasse kannst du nun Punkte mit unterschiedlichen Koordinaten erzeugen - (1;1), (4;-2), (-1,4;8), usw.

Die Klasse Punkt definiert außerdem eine Methode "verschieben()", die den Punkt um -1 auf x- und y-Achse verschiebt. Wenn du jetzt diese Methode vom Punkt (1;1) aufrufst, ist er hinterher auf (0;0). Die anderen Objekte ((4;-2) und (-1,4;8)) haben aber immer noch ihre alten Werte.

Es geht bei beidem ‒ prozeduraler und objektorientierter Programmierung ‒ um die gleiche Sache: Daß man beim Programmieren den Überblick behält. Die Programme sind immer länger geworden und enthalten immer mehr Variablen und Anweisungen. Durch die Unübersichtlichkeit kann man Fehler machen. Und die Arbeit wird dadurch auch mühsam. Wenn man nun über viele Sachen den Überblick behalten will, ordnet man sie nach irgendeinem System in beschriftete Behälter, von denen jeder nur einen überschaubaren Inhalt hat. Der Unterschied zwischen prozedural und objektorientiert besteht nur darin, daß im Lauf der Zeit ausgefeiltere, praktischere Behältersysteme für Daten und Programmteile entwickelt worden sind.

Man begann damit, daß man Variablen, die aus irgendwelchen Gründen zusammen gehören, in zusammengesetzten Datenstrukturen zusammenfaßte, so daß man sie unter einem gemeinsamen Namen ansprechen kann (z.B. Arrays, Records bzw Structs). Die Muster, nach denen solche Datenstrukturen in Serie erzeugen kann, nennt man zusammengesetzte Datentypen. Und man faßte Anweisungsfolgen, die man öfters benötigte, in Unterprogrammen zusammen (z.B. Prozeduren, Funktionen), die ebenfalls Namen haben, unter denen man sie aufrufen kann. Das Programm besteht aus der Definition der Datentypen und aus ihnen gebildeten Variablen, aus der Definition der Unterprogramme und dann aus einem Hauptprogramm, das bei Bedarf diese Unterprogramme aufruft, um Teilaufgaben zu erledigen. Auf diese Weise zu programmieren, ist der prozedurale Programmierstil.

Nun werden bestimmte Unterprogramme immer für bestimmte Sorten von Datenbehältern verwendet. Man zog daraus die Konsequenz, diese zusammengehörigen Datentypen mit den dazugehörigen Unterprogrammen auch wieder in beschrifteten Behältern zusammenzufassen, das sind die Objekte. Und die Muster, nach denen man Objekte in Serie erzeugen kann, nennt man Klassen oder Prototypen. Das zu tun ist objektorientierte Programmierung und Sprachen, die das möglich machen, sind objektorientierte Programmiersprachen.

Was ish hier geschrieben habe, ist so einfach wie möglich gehalten. Anderswo ist es komplizierter und ausführlicher dargestellt. Es gibt nicht nur prozedurale und objektorientierte, sondern auch funktionale Programmierung und eine ganze Reihe anderer Programmierstile. Manche unterscheiden noch genauer zwischen verschiedenen Sprachen, die Objekte anbieten, etwa zwischen objekt-"orientiert", objekt-"basiert", "nicht wirklich objektorientiert" usw. Meiner Ansicht nach lohnt es wenig, sich in das genaue Sortieren der Sprachen eingehend zu vertiefen, allein schon deshalb, weil jede wichtige Programmiersprache ständig weiterentwickelt wird und dabei neue Eigenschaften hinzubekommt. So kann man heute auch in Fortran, Cobol und Lisp längst mit Objekten programmieren ‒ wenn man will.

Übrigens kann man auch auf objektorientierte Weise unübersichtliche, verworrene und fehlerverseuchte Programme schreiben. Die Objektorientierung erlaubt uns heute aber, über größere und kompliziertere Programme einigermaßen den Überblick zu behalten als früher. Die graphischen, ereignisgesteuerten Benutzeroberflächen der heutigen Betriebssysteme zu schreiben wäre ohne objektorientierte Programmierung kaum möglich gewesen.