Was sind die größten Vorteile und Nachteile der Objekt- orientierten Programmierung?

5 Antworten

Klassen sind Baupläne für aus ihnen instanziierte (erzeugte) Objekte. (Objekte sind also Klasseninstanzen)

Vorteil der OOP ist die Bündelung von Daten und den auf ihnen definierten Operationen (Methoden). Es findet also ein Kapselung statt, Dich muß nicht interessieren, wie das im Detail implementiert ist, Du hast eben die definierte Schnittstelle, auf der Du operieren kannst.

Dank Vererbung etc. lassen sich Aufgaben und somit Code gut strukturieren und es kommt zu hoher Wiederverwendung.

Wiederverwertbarkeit kann auch ein Nachteil sein, nämlich genau dann, wenn in einer Basiskomponente ein schwerwiegender Fehler existiert.

Darüber hinaus verbraucht OOP oft mehr Resourcen, also Speicher und Rechenzeit, vor allem wenn man diese exzessiv nutzt. Das betrifft dann vor allem Dinge, die erst zur Laufzeit dynamisch entschieden werden können.

Ein Objekt ist eine Instanz einer Klasse.

Die Klasse ist der Blueprint, das Objekt dann das Auto was daraus gebaut wurde und mit dem du interagieren kannst.

Woher ich das weiß:Berufserfahrung – Softwareentwickler
Questionageek 
Fragesteller
 08.04.2022, 15:05

Okay, und was sind die größten Vorteile und Nachteile der Objekt- orientierten Programmierung?

0

Objektorientierung entspricht am ehesten unserer gewohnten Vorgehensweise im Leben:

Du stellst dich nicht auf die Straße und rufst "Käsebrötchen". Da passiert nix. Du musst zum Bäcker gehen.

Objektorientiert ausgedruckt:

meinBroetchen = einBaecker.gibKaesebrötchen( );

Wir handeln immer kontextabhängig: Du gehst nicht zum Zahnarzt und erwartest dort Kinokarten zu bekommen. Unsere Welt ist sortiert nach Einheiten mit bestimmten Fähigkeiten:

class Kino {

karteKaufen(Preis);

popkornKaufen(Menge);

filmGucken();

}:

Den Zahnarzt will ich hier gar nicht ausführen. :(

Aber du erkennst schon hier, dass du fast raten könntest, was der Zahni so alles macht.

Das geht wegen objektorientiertem Handeln, Denken und zuständig sein.

Hoffe ich konnte etwas zum Verständnis beitragen. Alle anderen Antworten halte ich bis hier aber ebenfalls für gut und richtig.

der vorteil ist

deine daten und funktionen sind in logisch strukturierten einheiten zusammengefasst

du kannst viele komplexitäten wegabstrahieren (abstraktion gibts auch in anderen paradigmen, aber ich meine in oop ist es besonders gut)

du kannst vieles in deinem code darstellen, vor allem datenstrukturen abzubilden kann besonders toll sein

der nachteil ist

vererbung ist sehr komplex und sollte immer durchdacht sein. aufgrund dessen ist es quasi kein vorteil mehr, da die meisten eh dazu raten "composition over inheritance" zu befolgen

je nach situation ist abstraktion ein nachteil, da man sich nicht mit dem pc beschäftigt sondern mit der problemstellung (persönlich finde ich abstraktion echt geil)

in oop geht es vor allem um zustände, aber zustände werden mit größerer codebasis immer komplexer, weshalb man immer mehr richtung funktionale programmierung geht (objekte die sich nicht mehr verändern lassen (nur noch 1 zustand), funktionen die unter sich bleiben und nichts von außerhalb beeinflussen)

manchmal ist das konzept von oop nicht ganz durchdacht, denn sogar einer der vorreiter von oop (alan kay), ist nicht ganz so begeistert von heutiger oop (klassenbasierte oop).
im grunde gibt es viele verschiedene arten von oop

oop ist an sich sehr komplex, abstrakt & inkonsistent und meiner meinung nach kaum anfängerfreundlich

Von Experte grtgrt bestätigt

Vorteile der OOP:

Unterschied zwischen Objekten und Klassen

  • Ein Objekt wird zur Laufzeit eines Programms/Skripts als Instanz einer Klasse erzeugt!

So habe ich es irgendwann mal während meiner Tätigkeit als Software-Entwickler - die ich heute noch ausübe - gelernt ;)

Woher ich das weiß:Berufserfahrung
Questionageek 
Fragesteller
 08.04.2022, 15:06

Was bedeutet. Polymorphie?

Ja aber was ist der Unterschied zwischen Klassen und Objekte? Ich meine da gibt es eigentlich kein Unterschied, oder?

0
zooper  08.04.2022, 15:13
@Questionageek

Doch, das eine ist ein reales Objekt was erstellt wird, das andere nur eine Anleitung.

Wenn du ein Auto aufmalst vs. wenn du tatsächlich ein Auto hast sind doch auch unterschiedliche Sachen ;)

0
PeterKremsner  08.04.2022, 15:30
@Questionageek

Polymorphie ist die Vererbung.

Also du hast eine Klasse Auto und du hast eine Klasse Mercedes. Ein Mercedes ist ein Auto kann also alles was ein Auto auch kann, aber ein Mercedes hat zB eine bessere Beschleunigung als ein Fiat.

Die Polymorphie erlaubt es jetzt das ganze eben genau so zu Programmieren, indem du eine Klasse Auto hast und die Klasse Mercedes erbt von der Klasse Auto.

Objekte sind eigentlich so gut wie alles in Objektorientierten Sprachen. Klassen sind nur vorlagen, so wie eine Bauanleitung, ein Objekt bzw hier geneuer eine Klasseninstanz ist dann eben das nach dieser Anleitung gebaute Objekt.

Die Klasse Mercedes ist zB die Bauanleitung für einen Mercedes und das Objekt ist der Mercedes welcher in der Garage steht.

0
TechPech1984  08.04.2022, 15:37
@Questionageek

das objekt belegt realen speicher vom typ klasse . die klasse dient nur zur erzeugung des objektes . die klasse ist die abstrakte funktionsweise .

0
grtgrt  08.04.2022, 16:08
@Questionageek

Klassen sind abstrakte Datentypen, Objekte sind Instanzen solcher Datentypen.

0
grtgrt  08.04.2022, 16:14
@grtgrt

Ein Datentyp heißt abstrakt, wenn jedes seiner Objekte ein nicht leeres Implementierungsgeheimnis hat (und sich daher als besonders einfach darstellt).

0
grtgrt  08.04.2022, 16:23
@grtgrt

Jede Klasse ist zudem gemeinsames Teilprogramm aller Programme, welche diese Klasse nutzen (und somit Code, der sich unverändert als Baustein beliebig vieler Anwendungen nutzen lässt). Man nennt solchen Code "problemlos wiederverwendbar" in potentiell unterschiedlichstem Kontext.

Datenabstraktion und Wiederverwendbarkeit sind die wesentlichen Vorteile klassenbasierter (= objektorientierter) Software.

0
grtgrt  08.04.2022, 16:38
@PeterKremsner

Polymorphie bedeutet: Jede Instanz einer Klasse K gilt auch als Instanz sämtlicher Oberklassen von K.

0