MINT üben

Datenkapselung mit get und set

Zwei Abituraufgaben mit Hinweisen und Erwartungshorizont: private Attribute, Getter und Setter mit Prüfung – Terminkalender und Stromzähler.

Dein Fortschritt:
0 / 0 Aufgaben
1

Termine im digitalen Schulkalender

AFB I–II

Für den digitalen Schulkalender wird eine Klasse Termin entwickelt. Ein Termin besteht aus einem Titel, einem Tag (1 bis 31), einem Monat (1 bis 12), der Stunde des Beginns (0 bis 23) und einer Dauer in Minuten. Die Dauer muss zwischen 15 und 480 Minuten liegen und ein Vielfaches von 15 sein, weil der Kalender in Viertelstunden-Rastern arbeitet. Vereinfachend wird nicht geprüft, ob ein Monat wirklich 31 Tage hat.

Alle Setter übernehmen einen Wert nur, wenn er gültig ist; andernfalls bleibt der bisherige Wert erhalten. Der Konstruktor belegt zunächst Tag und Monat mit 1, die Stunde mit 8 und die Dauer mit 60 und übernimmt anschließend die übergebenen Werte über die Setter – ungültige Parameter führen also zu den Standardwerten.

Material 1: Klassenkarte und begonnene Implementierung
Termin
  • - titel: Zeichenkette
  • - tag: Ganzzahl
  • - monat: Ganzzahl
  • - stunde: Ganzzahl
  • - dauer: Ganzzahl
  • c Termin(titel: Zeichenkette, tag: Ganzzahl, monat: Ganzzahl, stunde: Ganzzahl)
  • + getTitel(): Zeichenkette
  • + getTag(): Ganzzahl
  • + setTag(tag: Ganzzahl)
  • + getMonat(): Ganzzahl
  • + setMonat(monat: Ganzzahl)
  • + getStunde(): Ganzzahl
  • + setStunde(stunde: Ganzzahl)
  • + getDauer(): Ganzzahl
  • + setDauer(dauer: Ganzzahl)
public class Termin {
    private String titel;
    private int tag;
    private int monat;
    private int stunde;
    private int dauer;

    public String getTitel() {
        return titel;
    }

    public int getTag() {
        return tag;
    }

    public void setTag(int tag) {
        if (tag >= 1 && tag <= 31) {
            this.tag = tag;
        }
    }

    public int getMonat() {
        return monat;
    }

    public void setMonat(int monat) {
        if (monat >= 1 && monat <= 12) {
            this.monat = monat;
        }
    }

    public int getStunde() {
        return stunde;
    }

    // Konstruktor, setStunde, getDauer und setDauer fehlen
}
Titel, Tag und Monat sind bereits gekapselt.
Material 2: Aufruffolge
Termin t = new Termin("Zahnarzt", 31, 13, 9);
t.setDauer(50);
t.setStunde(24);
t.setDauer(90);
t.setTag(0);
Eintragungen einer Schülerin in ihren Kalender
  1. Erläutern Sie das Prinzip der Datenkapselung am Beispiel der Klasse Termin. Gehen Sie dabei auf einen konkreten Fehler ein, der ohne Kapselung entstehen könnte.
  2. Ergänzen Sie die Klasse aus Material 1 um den Konstruktor sowie die Methoden setStunde, getDauer und setDauer gemäß der Beschreibung.
  3. Geben Sie den Zustand des Objekts t nach Ausführung der Aufruffolge in Material 2 als Objektkarte an.

Hinweise

Hinweis zu Aufgabe a)
Was bedeutet private für andere Klassen? Wie erreichen sie die Werte trotzdem? Stell dir vor, die Kalender-App könnte direkt t.stunde = 25; schreiben – was würde die Wochenansicht dann anzeigen?„Erläutern“ heißt: das Prinzip nicht nur definieren, sondern an diesem Beispiel verständlich machen.
Hinweis zu Aufgabe b)
Parameter und Attribut heißen gleich – du brauchst this. „Vielfaches von 15“ prüfst du mit dem Rest der Division: dauer % 15 == 0. Im Konstruktor erst die Standardwerte setzen, dann die Setter aufrufen.„Ergänzen“ heißt: die vorhandene Implementierung weiterführen, ohne sie zu verändern.
Hinweis zu Aufgabe c)
Gehe jeden Parameter des Konstruktors einzeln durch: Ist 31 ein gültiger Tag, 13 ein gültiger Monat? Prüfe bei jedem Setter alle Bedingungen – bei der Dauer sind es drei.