🏗️ Lehrpfad 2: Objektorientierung & Kapselung

Java 06: Kapselung, Immutability & Records

Schütze Datenintegrität mit Kapselung (private Attribute, Getter/Setter) und lerne die modernen unveränderlichen Java 16+ record-Klassen kennen.

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.java (Startercode) 🧪 TestAufgabe.java (Tests) 💡 Musterloesung.java (Lösung) 📖 README.md

💡 1. Kapselung & Moderne Records

Java 16 führte `record` als transparente, unveränderliche Datenträgerklasse ein. Boilerplate wie Getter, `equals()`, `hashCode()` und `toString()` entfallen komplett:

// Klassische Kapselung:
public class UserDto {
    private final String username;
    private final String email;

    public UserDto(String username, String email) {
        this.username = Objects.requireNonNull(username);
        this.email = Objects.requireNonNull(email);
    }
    public String getUsername() { return username; }
    public String getEmail() { return email; }
}

// Moderner Java 16+ Record (identische Funktionalität in 1 Zeile!):
public record UserRecord(String username, String email) {
    // Kompakter Konstruktor für Validierung:
    public UserRecord {
        Objects.requireNonNull(username, "Username darf nicht null sein");
    }
}
🛡️ Didaktische Analogie: Der Tresor mit Sicherheitsschleuse

Ohne Kapselung kann jeder Passant direkt ins Bankgewölbe greifen. Mit `private` und Settern steht ein Sicherheitsbeamter am Eingang, der jede Einzahlung auf Falschgeld prüft.

⚡ 2. Quick-Cheat-Sheet

FeatureKlassische KlasseJava Record
MutierbarkeitFrei wählbar (mutable/immutable)Streng immutable (Felder sind final)
Getter-SyntaxgetName()name() (ohne get-Präfix)
equals & hashCodeMuss manuell generiert werdenAutomatisch wertbasiert generiert
VererbungErweiterbar mit extendsFinal (kann keine Klassen erweitern)

⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)

⚠️ Getter bei Records ohne 'get'

Bei Records heißen die Zugriffsmethoden wie die Komponenten selbst: user.email(), NICHT user.getEmail()!

⚠️ Shallow Immutability bei Records

Enthält ein Record eine veränderliche `List`, kann der Inhalt der Liste trotzdem mutiert werden. Nutze `List.copyOf()` im kompakten Konstruktor!

🧠 4. Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in Aufgabe.java

💻 In Web-IDE öffnen & lösen →