Was heißt objektorientiert, ist das gut oder schlecht?

8 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Neben OOP kann man auch Prozedural arbeiten. Beide haben ihre Vor- und Nachteile.

Prozedurale Programmierung macht produktiv, man kann Funktionen definieren, die man mehrmals wiederverwenden kann (zB. für Volumenberechnungen eines Würfels) - Vorteil, die Speicheraufwendung bleibt niedrig. Spätestens, wenn man sich an ein großes Projekt rantraut, verliert man leicht die Übersicht und Fehler entstehen.

Hier kommt die OOP ins Spiel. Hier arbeitest du mit einem Bauplan, dein Objekt, das die Attribute und Funktionen für dein Programm mit sich trägt. Du kannst deinen Bauplan mit anderen Bauplänen erweitern, du kannst deinem Bauplan eine bestimmte Konvention vorschreiben, mehrere Baupläne können miteinander in Beziehung stehen.

Der Sinn dieser Baupläne ist, dass der Code nicht mehr auf einer Stelle überwiegt. Jeder Bauplan hat seine Verantwortung und muss sich nicht um anderes kümmern. Damit erhält man eine modulare Struktur und man kann diese Module leicht in andere Projekte integrieren, die Wiederverwertbarkeit steigt.

Nachteil an der OOP Geschichte ist, dass die Planung viel Zeit braucht und da mehrere Objekte miteinander in Beziehung stehen der Code sogar langsamer ausführen kann als Prozeduraler Code. Mit jeder Klasse erhöht sich auch der Speicherverbrauch.

Ich will jetzt nicht sagen, dass OOP schlecht ist, nein, im Gegenteil, es vereinfacht den Prozess der Entwicklung, jedoch muss man sich sehr lang in dieses Thema einarbeiten. Natürlich wäre OOP eine gute Gelegenheit das früh zu lernen, aber vorher sollte man sich doch zuerst auf die Sprache konzentrieren und von ihr Gebrauch zu machen, ausprobieren, lernen, erforschen.

Und dann, wenn ihr an dem Punkt gekommen seid ein Gefühl dafür zu bekommen und einen Plan für euer Konzept zu haben, könnt ihr euch an OOP ranwagen.

Ist etwas Gutes ;-)

Bei der Objektorientierung versucht man mit Hilfe von sogenannten Klassen und Objekten sich an der realen Welt zu orientieren. Klassen kannst du dir hierbei als Blaupause/ Vorlage für Objekte vorstellen. So kann es die Klasse Fahrzeug geben und auf dieser Vorlage können Objekte erstellt werden, die dann Autos abbilden wie BMW oder Audi. 

Klassen machen aber so noch keinen Sinn, deshalb kann man ihnen Eigenschaften (Felder oder Variablen genannt) und eine bestimmte Funktionalität / Funktionen geben ( auch Methoden genannt).
Am Beispiel der Autoklasse könntest du in der Klasse die Variable geschwindigkeit erstellen und zum Beispiel eine Methode namens beschleunigung, deren Aufgabe es ist die Variable geschwindigkeit zu erhöhen.

OOP (Objekt orientierte Programmierung oder auf englisch object oriented programming) macht aber nur bei großen Projekten Sinn, wenn du ein Programm schreiben möchtest, dass nur "Hello World!" ausgibt, dann kannst du das auch ohne Objektorientierung machen, sofern es die Programmiersprache erlaubt. In Python kann man sich zum Beispiel entscheiden, ob man mit Klassen arbeiten möchte oder nicht. In der Sprache Java hingegen geht es nicht ohne Klassen.

Das ganze Gebiet ist aber noch viel komplexer, als ich es beschrieben habe, so werdet ihr auch auf Begriffe wie Vererbung, Polymorphie,... stoßen. Diese werde ich jedoch nicht erklären, da das den Rahmen sprengen würde.

Viel Spaß beim Programmieren!

Objektorientiert bedeutet, dass man zum beispiel ein Haus mit 2 Zimmern erstellt. Nun möchte man 3 Zimmer und kann (zb Java) einfach sagen, dass es alle eigenschaften des hauses mit 2 zimmern übernimmt und überschreibt dann die 2 zimmer und setzt 3 hinein. Das ist praktischer als jedes mal alles neu zu machen.

Aktuell würde ich sagen, dass es in der Lehre (also vor allem an den Unis) zum Standard gehört. Objektorientierte Sprachen sind ziemlich weit verbreitet und es macht sicher Sinn, sich damit mal zu beschäftigen.

Allerdings sagt "weit verbreitet" nichts darüber aus, ob die Sprache auch "gut" ist. Gerade, was die parallelisierung angeht (die immer wichtiger wird) haben Objektorientierte Programme große Nachteile.

Da Du am Anfang vermutlich nix paralleles schreiben wirst, kannst Du ruhig mal ein Javatutorial oder so angehen (ich empfehle immer gailer-net.de). Behalte nur im Kopf, dass es auf der Welt noch andere Paradigmen gibt.

In Programmiersprachen gibt es diverse Konzepte:

  • Variable, Datentyp
  • Anweisung (z. b. Zuweisung, Subroutineneaufruf), Sequenz
  • Selektion (if) und Iteriation (while, for)
  • Subroutinen mit Parametern und Rückgabewerten
  • Arrays
  • Records
  • Delegation und Methoden
  • Vererbung
  • Polymorphismus
  • Schnittstellen
  • Garbage Collection
  • Reflection
  • ....

Programmiersprachen, welche mind. die Delegation, die Vererbung und den Polymorphismus kennen, nennt man Objektorientiert (s. hier: http://www.programmieraufgaben.ch/uploads/oo.pdf).

Wenn Du ein Programm entwirfst, kannst Du auch objektorientiert vorgehen, wenn dies von Deiner Sprache nicht unterstützt wird. Dies nennt sich dann objektorientiertes Vorgehen. Die Firma Sauber (Rennwagen) hat alles in C programmiert aber obejektorientiert entworfen. Damit will ich sagen, dass das Vorgehen direkt noch nichts mit der konkreten Programmiersprache zu tun hat. Objektorientierte Sprachen (Java, C++, Python, ...) machen es Dir aber einfacher, objektorientiert loszulegen.

Doch wie muss ich mir das konkret vorstellen? Am einfachsten stellst Du Dir das Programmieren eines Computerspiels vor, indem eine Spielfigur vorkommt. Nun hat diese Figur einige Attribute (Kraft zwischen 0 und 1, Ort in x und y, alter in stunden, ....). Dies kann man alles noch mit einfachen "Records" lösen. Doch die Figur hat auch ein Verhalten. Dies lösen wir mit Methoden: nachRechtsDrehen(), vorwärtsgehen(), altern(), kraftSetzen(real: neueKraft). Nun hast Du eine Variable "f: Figur" und kannst nun nicht nur die Attribute setzen (f.x = 7) sondern auch die Methoden aufrufen (f.altern()). Nun bist Du bereits am Objekt orientiert.

Wenn Du nun noch eine zweite Figur (z. Gegner) erstellst, indem Du nicht alles neu programmierst, sondern nur diejenigen Attributen und Methoden hinzunimmst, die der Gegner zusätzlich hat (z. B. angriffspunkte), dann hast du die Vererbung angewendet: Du nutzt bereits bestehenden Programmcode.

Eine Variable kann nun vom Typ Figur sein, aber auch einen Gegner aufnehmen, nun sprechen wir von Polymorphismus:

Figur g = new Gegner();

So, die wichtigen Begriffe der Obejektorientierung hast Du nun ein erstes Mal gehört, nun brauchst Du nur noch etwas Übung. Googelst Du nach (objektorientierten)"programmieraufgaben" wirst Du rasch fündig und kannst alle die Konzepte trainieren.

Die Frage, ob objektorientiert nun gut oder böse ist, habe ich damit nicht beantwortet. Doch zwischen gut und böse unterscheiden eher die Hollywood Filme oder die Religionen, als wir Ingenieure und Wissenschaftler ;-)