Skip to content

Donnerstag, 2026-02-26_Programmiertechnik_UDEMY

1 Inheritance (Vererbung)

Inheritance beschreibt eine:

IS-A Beziehung

Beispiel:

Monitor IS A Product
Motherboard IS A Product
ComputerCase IS A Product

Das bedeutet: Eine Unterklasse ist eine Spezialisierung der Oberklasse.

➡ Inheritance = Wiederverwendung durch Spezialisierung.

Alle Subklassen erben:

  • manufacturer
  • model
  • width
  • height
  • depth

2 Composition (Komposition)

Composition beschreibt eine:

HAS-A Beziehung

Beispiel:

PersonalComputer HAS A
   - Monitor
   - Motherboard
   - ComputerCase

Ein PC IST ein Product,
aber er HAT andere Objekte.

➡ Composition = Wiederverwendung durch Delegation.

Delegation bedeutet: Ein Objekt übergibt Aufgaben an seine Bestandteile.


3 IS-A vs HAS-A Denkregel

Wenn der Satz in natürlicher Sprache komisch klingt, ist das Design falsch.

DigitalProduct IS A physical Product.

Das klingt falsch → also keine Vererbung.

Inheritance muss reale Logik widerspiegeln.


4 Klassenstruktur

Basisklasse

Product
 ├── manufacturer
 ├── model
 └── dimensions

Spezifische Produkte

Monitor extends Product
Motherboard extends Product
ComputerCase extends Product

Zusammengesetztes Objekt

PersonalComputer extends Product
   ├── Monitor
   ├── Motherboard
   └── ComputerCase

5 Encapsulation (Kapselung)

Encapsulation bedeutet:

Kontrollierter Zugriff auf internen Zustand.

Nicht: ❌ „Keine Getter“

Sondern: ✔ Private Felder
✔ Öffentliche Methoden
✔ Objekt schützt seine Konsistenz


❌ Schlechter Zugriff

pc.getMonitor().drawPixelAt(...)

Problem: → Außenwelt kennt interne Struktur
→ Starke Kopplung


✔ Besseres Design

public void powerUp() {
    computerCase.pressPowerButton();
    drawLogo();
}

Außenwelt:

pc.powerUp();

Die Details bleiben intern verborgen.


6 Warum Composition bevorzugt wird

Design-Prinzip:

Favor Composition over Inheritance.

Vorteil 1 – Geringere Kopplung

Inheritance: → starke Abhängigkeit von Elternklasse

Composition: → lose Kopplung


Vorteil 2 – Flexibilität

Monitor austauschen? Kein Problem.

Hierarchie ändern? Nicht nötig.


Vorteil 3 – Erweiterbarkeit

Inheritance ist starr:

Java erlaubt nur:

extends eine Klasse

Composition erlaubt:

Beliebig viele Objekte kombinieren

Subclass – Definition & Verwendung

Was ist eine Subclass (Unterklasse)?

Eine Subclass ist eine Klasse, die von einer anderen Klasse erbt.
Sie wird mit extends definiert.

class Product {
    public void start() {
        System.out.println("Starting product");
    }
}

class Monitor extends Product {
}

Hier gilt:

Monitor IS A Product
Monitor ist eine Subclass von Product.


Was erbt eine Subclass?

Eine Subclass erbt:

  • Alle public Methoden
  • Alle protected Methoden
  • Alle nicht-privaten Felder

Sie kann zusätzlich:

  • Neue Methoden hinzufügen
  • Bestehende Methoden überschreiben (override)

Methode überschreiben (Override)

class Monitor extends Product {

    @Override
    public void start() {
        System.out.println("Starting monitor");
    }

    public void drawPixel() {
        System.out.println("Drawing pixel");
    }
}

Hier:

  • start() wird überschrieben
  • drawPixel() ist neue Funktionalität

Wie benutzt man eine Subclass?

1 Direkt

Monitor m = new Monitor();
m.drawPixel();
m.start();

2 Polymorphisch

Product p = new Monitor();
p.start();

Wichtig:

Die ausgeführte Methode hängt vom tatsächlichen Objekt ab
(nicht vom Referenztyp).

Das nennt man:

Dynamic Dispatch.


Wann sollte man eine Subclass erstellen?

Nur wenn:

  • Eine echte IS-A Beziehung existiert
  • Das Modell fachlich korrekt ist
  • Die Subclass vollständig ersetzbar bleibt (Liskov Prinzip)

Beispiel:

Monitor IS A Product → sinnvoll
Car IS A Engine → falsch → hier braucht man Composition


Merksatz

Inheritance = Spezialisierung
Subclass erweitert oder verfeinert das Verhalten der Basisklasse
Polymorphism ermöglicht Austauschbarkeit durch gemeinsame Oberklasse.

7 DigitalProduct Problem

Wenn Product width/height/depth enthält:

DigitalProduct extends Product

→ erbt physische Eigenschaften
→ fachlich falsch

Bessere Lösung:

Product (allgemein)

Dimensions
 ├── width
 ├── height
 └── depth

Dann:

Motherboard HAS A Dimensions

DigitalProduct braucht keine Dimensions.

Flexibles Modell.


8 Polymorphism (Laufzeitverhalten)

Polymorphism bedeutet:

Gleicher Typ – unterschiedliches Verhalten zur Laufzeit.

Beispiel:

Product p = new Monitor();

Hier entscheidet sich zur Laufzeit, welche Methode ausgeführt wird.

Das nennt man:

Dynamic Dispatch

Beispiel

public void start(Product product) {
    product.start();
}

Wenn Monitor start() überschreibt, wird die Monitor-Version ausgeführt.

Das ist echte Austauschbarkeit.


9 Liskov Substitution Principle

Wichtige Regel:

Subtypen müssen vollständig ersetzbar sein.

Wenn ein Subtyp spezielles Verhalten erzwingt, das nicht zur Basisklasse passt, ist das Design falsch.


10 Kopplung (Coupling)

Inheritance: → starke Kopplung
→ Änderungen wirken sich auf Unterklassen aus

Composition: → lose Kopplung
→ Teile können unabhängig geändert werden


11 Denkmodell

Inheritance:

Hierarchie

Composition:

Bausteinsystem


12 Prüfungs-Merksätze

  • Inheritance = IS-A
  • Composition = HAS-A
  • Encapsulation = interne Struktur schützen
  • Polymorphism = gleiches Interface, anderes Verhalten
  • Delegation statt Vererbung bevorzugen
  • Subtypen müssen ersetzbar sein
  • Favor Composition over Inheritance

13 Zusammenfassung

Inheritance: ✔ Wiederverwendung durch Spezialisierung
✖ Starr
✖ Starke Kopplung

Composition: ✔ Flexibel
✔ Erweiterbar
✔ Realitätsnah
✔ Lose Kopplung

Encapsulation: ✔ Schutz der Objekt-Integrität

Polymorphism: ✔ Austauschbarkeit
✔ Laufzeitverhalten