OOP (Objektorientierte Programmierung)
Kurz: Ein Programmierparadigma, das Daten und die Funktionen, die auf diesen Daten arbeiten, gemeinsam in Klassen bündelt, statt Daten und Logik strikt getrennt zu halten.
Genauer: Die vier zentralen Prinzipien der OOP sind Kapselung (Daten vor direktem Zugriff schützen), Vererbung (Klassen bauen aufeinander auf), Polymorphie (gleicher Aufruf, unterschiedliches Verhalten je nach konkretem Objekt) und Abstraktion (Komplexität hinter einer einfachen Schnittstelle verstecken). Gegenpol ist die prozedurale bzw. funktionale Programmierung, bei der Daten und Funktionen getrennt bleiben.
Im Detail
Der Grundgedanke der OOP entstand aus der Beobachtung, dass sich reale Systeme oft natürlich als Sammlung von interagierenden “Dingen” mit eigenem Zustand und eigenem Verhalten modellieren lassen — ein Bankkonto, ein Auto, ein Nutzerprofil. Statt Daten (der Kontostand) und Logik (Ein-/Auszahlen) in getrennten Strukturen zu verwalten, bündelt OOP beides in einer Klasse:
// Prozedural: Daten und Logik getrennt
struct Konto { double saldo; }
void einzahlen(Konto k, double betrag) { k.saldo += betrag; }
// Objektorientiert: Daten und Logik zusammen in einer Klasse
class Konto {
private double saldo;
void einzahlen(double betrag) { this.saldo += betrag; }
}Die vier Grundprinzipien im Überblick, mit ihrer jeweiligen Kernfrage:
- Kapselung: Wer darf auf die Daten zugreifen?
- Vererbung: Wie teilen sich verwandte Klassen gemeinsamen Code?
- Polymorphie: Wie kann derselbe Aufruf je nach konkretem Objekt unterschiedlich reagieren?
- Abstraktion: Was muss ein Nutzer der Klasse wissen — und was nicht?
OOP ist eines der verbreitetsten Paradigmen (Java, C#, Python, C++, TypeScript unterstützen es alle direkt), aber nicht das einzige sinnvolle — funktionale Programmierung (Betonung auf unveränderlichen Daten und reinen Funktionen ohne Seiteneffekte) und prozedurale Programmierung (einfache Abfolgen von Anweisungen und Funktionsaufrufen ohne Objektmodell) lösen bestimmte Probleme oft eleganter. Viele moderne Sprachen sind inzwischen “Multi-Paradigma” und erlauben, je nach Situation objektorientierte und funktionale Stilmittel zu mischen, statt sich strikt auf eines festzulegen.
Ein häufig genannter Kritikpunkt an OOP ist die Tendenz zu tiefen Vererbungs-Hierarchien, die mit der Zeit unübersichtlich und schwer änderbar werden (“Fragile Base Class Problem”) — als Gegenmittel empfehlen viele erfahrene Entwickler heute grundsätzlich “Komposition vor Vererbung”: Verhalten lieber durch das Zusammensetzen kleiner, unabhängiger Objekte erreichen als durch immer tiefere Klassenhierarchien.
Siehe auch: Classes, Objects, Encapsulation, Inheritance, Polymorphism, Abstraction