AP1

Objektorientierte Programmierung (OOP)

3 Min. Lesezeit

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. farbe oder ps.
  • 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.

Klasse und Objekte: Die Klasse Auto ist der Bauplan mit den Attributen farbe und ps und der Methode fahren(). Daraus entstehen drei Auto-Objekte mit eigenen Werten, zum Beispiel kupfer mit 110 PSKlasse und Objekte: Die Klasse Auto ist der Bauplan mit den Attributen farbe und ps und der Methode fahren(). Daraus entstehen drei Auto-Objekte mit eigenen Werten, zum Beispiel kupfer mit 110 PS

Beispiel in Java:

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.

Kapselung: Die Klasse Konto hat das private Attribut kontostand. Anderer Code darf nicht direkt darauf zugreifen, sondern nur über die öffentlichen Methoden getKontostand() und setKontostand(wert), die intern auf das Attribut zugreifenKapselung: Die Klasse Konto hat das private Attribut kontostand. Anderer Code darf nicht direkt darauf zugreifen, sondern nur über die öffentlichen Methoden getKontostand() und setKontostand(wert), die intern auf das Attribut zugreifen

Wer worauf zugreifen darf, legen Zugriffsmodifizierer fest:

ModifiziererUMLZugriff
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.

Vererbung: Kunde (kundenNr) und Mitarbeiter (gehalt) erben von Person (name, adresse) und haben damit auch name und adresseVererbung: Kunde (kundenNr) und Mitarbeiter (gehalt) erben von Person (name, adresse) und haben damit auch name und adresse

In Java: public class Kunde extends Person { ... }

Polymorphie

Polymorphie (Vielgestaltigkeit) bedeutet: Derselbe Methodenaufruf führt je nach Objekt zu unterschiedlichem Verhalten.

Polymorphie: Hund und Katze erben von Tier und überschreiben die Methode lautGeben(). Ein Hund gibt „Wuff!“ aus, eine Katze „Miau!“. Beim Aufruf tier.lautGeben() entscheidet das Objekt, welche Methode läuftPolymorphie: Hund und Katze erben von Tier und überschreiben die Methode lautGeben(). Ein Hund gibt „Wuff!“ aus, eine Katze „Miau!“. Beim Aufruf tier.lautGeben() entscheidet das Objekt, welche Methode läuft

  • Ü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) und addieren(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 Tier an 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

ProzeduralObjektorientiert
AufbauFolge von Anweisungen und FunktionenZusammenspiel von Objekten
Datengetrennt von den Funktionenmit den Methoden im Objekt gebündelt
Wiederverwendungüber Funktionenüber Klassen und Vererbung
Geeignet fürkleine Skripte, klar lineare Abläufegroße, langlebige Programme
BeispieleC, PascalJava, 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.