Frage von ManuTheMaiar, 161

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

Ich wollte mal zum Spaß mit meinem Bruder programmieren lernen, wenn wir schon nachts schlecht schlafen können, dann können wir die Zeit ja auch sinnvoll nutzen und jetzt sind wir dabei uns eine Programmierspache rauszusuchen und stoßen dabei immer wieder über den Begriff objektorientiert

Ist das etwas gutes oder schlecht ?

Antwort
von oelbart, 47

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.

Antwort
von RedKungFuMastr, 52

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.

Antwort
von phigeek, 24

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 ;-)

Antwort
von androhecker, 80

Für Anfänger auf jeden Fall gut. Objektorientiert heißt, dass Elemente wie eine Liste oder ein Bild als Objekt dargestellt werden, zum Beispiel könnte man einen Bauplan (Klasse) Mensch erstellen mit welchem man mehrere Menschen erstellen kann.

Mit prozeduralen Sprachen wie C ist das nicht möglich, da muss man eine andere Lösung finden. Für Objektorientierung muss man leider etwas Leistung herschenken.

Antwort
von RealStickman, 91

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.

Antwort
von carglassXD, 28

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!

Antwort
von SiroOne, 73

Objektorientiert bedeutet nur gutes, es sind moderne Programmiersprachen, die dir durch die Objekte das Leben erleichtern sollen, weil ohne die Objekte müsste man jedes mal das script wiederholen, so schiebt man nur ein Objekt ein und fertig.

Antwort
von Berny96, 50

Wie kannst du dir das objektoriente Programmieren vorstellen?

Stell dir vor du baust eine Stadt mit einer Gesellschaft auf die dafür da ist einen Nutzen zu befriedigen. Die Stadt repräsentiert dein Programm. In dieser Stadt hast du verschiedene Arbeiter die alles mögliche machen. Diese Arbeiter, je nach Beruf, verhalten sich verschieden und haben andere Eigenschaften. Zum Beispiel muss es Bauarbeiter geben die Kräftig sind, und denen man sagen kann "Bau dieses Gebäude!". Wiederrum gibt es auch Anwälte die für das Recht sorgen. Denen kannst du nicht sagen "Bau mal dieses Gebäude" sondern kannst du denen andere Fragen stellen und Aufgaben erteilen. Beim objektorientierten Programmierung geht es nur darum zuerst deine Mitarbeiter zu gestalten und ihnen Sachen beizubringen damit du Sie dann in der Gesellschaft einsetzen kannst. ein Objekt = ein Mitarbeiter. die Gesellschaft = das Programm. Du = Gott. 

Ich hoffe das vereinfacht es ein wenig :) Kannst gerne Fragen stellen :)

Antwort
von grtgrt, 76

Unter objektorientierter Programmierung versteht man den heute am meisten verbreiteten Programmierstil. Ihn besonders zu unterstützen, hat man objektorientierte Programmiersprachen ersonnen (C++, Java und C# sind die derzeit wichtigsten).

Wie sich objektorientierter Code von anderem Code unterscheidet, wird kurz erklärt in https://www.gutefrage.net/frage/was-bedeutet-objektorientiertes-programmieren-in... .

Kommentar von grtgrt ,

Nebenbei:

Es gibt im Prinzip nur 3 verschiedenen Programmierstile:

  • den prodezuralen (tyische Programmiersprachen sind Fortran, COBOL oder auch C)
  • den objektorientierten (typische Programmiersprachen dazu sind C++, Java, C#, aber z.B. auch Python)
  • den funktionalen (typische Programmiersprachen sind Lisp oder Scala).

Wer von imperativer Programmierung spricht meint damit das Gegenteil von funktionaler Programmierung (also prozedurale). Objektorientierte Programmierung ist nämlich einfach nur prozedurale unter Verwendung einer objektorientierten Sprache.

Mehr dazu in https://www.gutefrage.net/frage/was-ist-der-unterschied-zwischen-funktionaler-un... .

Kommentar von RedKungFuMastr ,

Über "Programmierstile" lässt sich streiten, da ist mir der Wiki Eintrag  über Paradigmen etwas sympatischer: https://de.wikipedia.org/wiki/Programmierparadigma#Objektorientierte_Programmier...

Kommentar von grtgrt ,

Der Fragende ist Programmieranfänger. Ihn gleich mit einer langen Liste von Programmierparadigmen zu konfrontieren, kann ihn nur entmutigen. Zudem gilt:

Zu den meisten dieser Paradigmen gibt es keine darauf spezialisierten Programmiersprachen (und schon gar nicht weit verbreitete).

Kommentar von RedKungFuMastr ,

Du kannst auch nicht sagen, dass C absolut prozedural ist. Man kann sehr wohl damit auch OOP ausüben. Man muss sich nicht nur auf eine Sprache spezialisieren. Paradigmen geben nur eine Herangehensweise vor.

Zudem finde ich das nicht entmutigend, denn da es so viele Ansätze gibt, kann man seinen eigenen Stil daraus entwickeln.

Kommentar von grtgrt ,

C ist eine absolut prozedurale Programmiersprache - erfunden zu einer Zeit, als es den Begriff der Objektorientierung noch gar nicht gab. 

Da OOP aber zunächst mal nur ein Abstraktionsprinzip ist und eine Methodik, redundanten Code zu vermeiden, kann man natürlich auch mit C objektorientierte Strukturen schaffen - sie werden halt nur nicht durch Sprachkonstrukte unterstützt (d.h. man hat sie selbst zu entwerfen und zu implementieren). Wer OOP will, aber dennoch nur C nutzen möchte, handelt denkbar ungeschickt.

Kommentar von Darkmalvet ,

Es gibt noch lineare Programmierung, das simpelste, da werden die Befehle einfach von oben nach unten abgearbeitet, wenn man damit komplexere Dinge machen will wird echt aufwändig

Kommentar von carglassXD ,

Lineare Programmierung, also auch ohne If/Else und Schleifen oder wie kann man sich das vorstellen? 
Das wäre ziemlich nutzlos :D

Kommentar von grtgrt ,

Das Wort "Lineare Programmierung" steht für "Lineare Optimierung" und bedeutet etwas völlig anderes ( nämlich eine mathematische Methodik, siehe https://de.wikipedia.org/wiki/Lineare_Optimierung ).  

Antwort
von Verdeachtig, 70

so, dass bei einer Programmiersprache oder einer Benutzeroberfläche die Elemente als Objekte bezeichnet werden. Bei den objektorientierten Programmiersprachen ist ein Objekt eine Informationsstruktur, die Daten zusammenfasst (Datentypen und Datenstrukturen), die einen Zustand besitzt und für die definiert ist, wie sie auf bestimmte Nachrichten (Messages) mittels vorgesehener Methoden zu regieren hat.

Sie kennen die Antwort?

Fragen Sie die Community