Objektorientierte Programmierung (OOP)
Die objektorientierte Programmierung (OOP) ist ein Programmierparadigma. Ein Programm besteht aus Objekten, die Daten und die dazugehörigen Funktionen bündeln, ähnlich wie Gegenstände der realen Welt. Verbreitete objektorientierte Sprachen sind Java, C#, C++ und Python.
Klasse und Objekt
- Klasse: Bauplan, der festlegt, welche Eigenschaften und Fähigkeiten Objekte haben, z. B.
Auto. - Objekt: Konkretes Exemplar einer Klasse mit eigenen Werten, z. B. ein kupferfarbenes Auto mit 110 PS. Ein Objekt heißt auch Instanz, das Erzeugen Instanziierung.
- Attribut: Eigenschaft eines Objekts, z. B.
farbeoderps. - Methode: Fähigkeit eines Objekts, also eine Funktion, die zur Klasse gehört, z. B.
fahren(). - Konstruktor: Besondere Methode, die beim Erzeugen eines Objekts aufgerufen wird und die Attribute mit Startwerten belegt.
Beispiel in Java:
public class Auto {
private String farbe;
private int ps;
public Auto(String farbe, int ps) { // Konstruktor
this.farbe = farbe;
this.ps = ps;
}
public void fahren() {
System.out.println("Auto (" + farbe + ", " + ps + " PS) fährt.");
}
}
Auto meinAuto = new Auto("kupfer", 110); // Instanziierung
meinAuto.fahren();
this verweist auf das aktuelle Objekt. So lassen sich das Attribut this.farbe und der gleichnamige Parameter farbe unterscheiden.
Die vier Grundprinzipien
Kapselung
Die Kapselung schützt die Attribute eines Objekts vor direktem Zugriff von außen (Information Hiding). Der Zugriff läuft nur über öffentliche Methoden, sogenannte Getter zum Lesen und Setter zum Ändern. Ein Setter kann Werte prüfen, bevor er sie übernimmt, z. B. keinen negativen Kontostand zulassen.
Wer worauf zugreifen darf, legen Zugriffsmodifizierer fest:
| Modifizierer | UML | Zugriff |
|---|---|---|
| public | + | von überall |
| private | - | nur innerhalb der Klasse |
| protected | # | Klasse und ihre Unterklassen |
Vererbung
Bei der Vererbung übernimmt eine Unterklasse (Kindklasse, Subklasse) alle Attribute und Methoden einer Oberklasse (Elternklasse, Superklasse) und ergänzt eigene. Die Beziehung lautet „ist ein“: Ein Kunde ist eine Person. Gemeinsamer Code steht nur einmal in der Oberklasse.
In Java: public class Kunde extends Person { ... }
Polymorphie
Polymorphie (Vielgestaltigkeit) bedeutet: Derselbe Methodenaufruf führt je nach Objekt zu unterschiedlichem Verhalten.
- Überschreiben (Overriding): Eine Unterklasse ersetzt eine geerbte Methode durch eine eigene Version mit gleicher Signatur.
- Überladen (Overloading): Mehrere Methoden in einer Klasse haben denselben Namen, aber unterschiedliche Parameter, z. B.
addieren(int a, int b)undaddieren(double a, double b).
Abstraktion
Die Abstraktion blendet Details aus und beschreibt nur das Wesentliche.
- Abstrakte Klasse: Kann nicht instanziiert werden und dient als Vorlage für Unterklassen. Sie kann abstrakte Methoden ohne Rumpf enthalten, die jede Unterklasse umsetzen muss. Beispiel: Ein
Tieran sich gibt es nicht, nur Hunde und Katzen. - Interface (Schnittstelle): Legt nur fest, welche Methoden eine Klasse anbieten muss, nicht wie. Eine Klasse implementiert ein Interface, in Java mit
implements.
Weitere Begriffe
- Klassenattribut (
static): Gehört zur Klasse, nicht zu einem einzelnen Objekt, und hat für alle Objekte denselben Wert, z. B. ein Zähler für erzeugte Objekte. - Beziehungen zwischen Klassen: Assoziation, Aggregation und Komposition, dargestellt im UML-Klassendiagramm (siehe Lernzettel Unified Modeling Language (UML)).
OOP und prozedurale Programmierung
| Prozedural | Objektorientiert | |
|---|---|---|
| Aufbau | Folge von Anweisungen und Funktionen | Zusammenspiel von Objekten |
| Daten | getrennt von den Funktionen | mit den Methoden im Objekt gebündelt |
| Wiederverwendung | über Funktionen | über Klassen und Vererbung |
| Geeignet für | kleine Skripte, klar lineare Abläufe | große, langlebige Programme |
| Beispiele | C, Pascal | Java, C#, C++, Python |
Vorteile der OOP: bessere Wartbarkeit, Wiederverwendbarkeit, Nähe zur realen Welt, Arbeit im Team an getrennten Klassen. Nachteile: mehr Planungsaufwand und für kleine Programme oft unnötig viel Struktur.