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
publicMethoden - Alle
protectedMethoden - 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 überschriebendrawPixel()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