MINT lernen

Datenkapselung mit get und set

Kann eine Uhr 25 Uhr anzeigen? Nur, wenn jeder an ihre Zeiger darf — so schützt ein Objekt seine eigenen Werte.

1

Warum private?

  • Problem:wäre stunde öffentlich, könnte jeder u.stunde = 25; schreiben — eine unmögliche Uhrzeit.
  • Datenkapselung:alle Attribute private; andere Klassen greifen nur über Methoden zu.
  • Getter:liest einen Wert: getStunde(), bei Wahrheitswerten istX().
  • Setter:schreibt einen Wert: setStunde(…) — und prüft ihn vorher.
  • Nur lesbar:Getter ohne Setter, z. B. eine Seriennummer, die sich nie ändern darf.

Herleitung:

- stunde: Ganzzahl
| Anfrage bilden
Start: das private Attribut im Klassendiagramm.
+ getStunde(): Ganzzahl
| nach Java
„get“ + Attributname mit großem Anfangsbuchstaben, gleicher Typ als Rückgabetyp.
public int getStunde()
| Rumpf ergänzen
Öffentlich, Rückgabetyp int vor dem Namen.
public int getStunde() { return stunde; }
Ergebnis
Der Rumpf gibt einfach den Attributwert zurück — fertig ist der Getter.
2

Setter mit Prüfung

  • Kopf:public void setStunde(int stunde) — ein Auftrag mit dem neuen Wert als Parameter.
  • Prüfung:nur wenn stunde >= 0 && stunde <= 23, wird der Wert übernommen.
  • this:this.stunde = stunde; — links das Attribut, rechts der Parameter.
  • Ungültig:der alte Wert bleibt erhalten; das Objekt ist nie in einem falschen Zustand.

Links steht die Klasse Uhrzeit, rechts ein Programm aus einer anderen Klasse. Tippe für jede Zeile zuerst, was passiert — dann „Ausführen“. Die Objektkarte zeigt den Zustand von u.

Kommt man an die Stunde?

public class Uhrzeit {
    private int stunde;
    private int minute;

    public Uhrzeit(int stunde, int minute) {
        this.stunde = stunde;
        this.minute = minute;
    }
    public int getStunde() {
        return stunde;
    }
    public void setStunde(int stunde) {
        if (stunde >= 0 && stunde <= 23) {
            this.stunde = stunde;
        }
    }
    public void setMinute(int minute) {
        if (minute >= 0 && minute <= 59) {
            this.minute = minute;
        }
    }
}
In einer anderen Klasse

    0 von 6 richtig vorhergesagt

    Halte fest: Von außen kommt man an ein private-Attribut nur über Methoden. Der Setter prüft jeden neuen Wert — ungültige Werte werden abgewiesen, das Objekt bleibt gültig.

    Merke

    Datenkapselung: Attribute private, lesen über getX(), schreiben über setX(…) mit Prüfung — so bleibt jedes Objekt gültig.

    3

    Allgemeine Hinweise

    Getter ohne return

    Ein Getter mit Rückgabetyp int muss mit return stunde; enden, sonst meldet der Compiler einen Fehler.

    this nicht vergessen

    Heißt der Parameter wie das Attribut, setzt stunde = stunde; nur den Parameter auf sich selbst — das Attribut bleibt unverändert.

    Nicht jedes Attribut braucht einen Setter

    Gib nur Setter an, die fachlich sinnvoll sind. Was sich nie ändern soll, bekommt nur einen Getter.

    Videos