MINT üben

Datenkapselung mit get und set

Ein privates Attribut ist wie ein Tresor mit Schalter: Wer etwas will, muss an der Methode vorbei — und die darf Nein sagen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Dreißig Übungen zum Klicken, Ziehen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du hängst, helfen dir die gestuften Tipps.

A1
Der Held im Quelltext
AFB I

Die Klasse Held eines Spiels speichert die Lebenspunkte (0 bis 100). Lies die Bestandteile aus dem Quelltext ab: Klicke nacheinander die gefragten Zeilen an.

Klicke die gesuchte Stelle an. Mit der Tastatur: Tab oder Pfeiltasten zum Wandern, Enter zum Auswählen.

public class Held { private int leben; public int getLeben() { return leben; } public void setLeben(int w) { if (w >= 0 && w <= 100) { leben = w; } }}
Das Attribut leben ist private. Der Getter gibt es mit return leben; zurück. Der Setter beginnt mit public void setLeben(int w), prüft in der if-Zeile den Bereich 0 bis 100 und schreibt erst dann mit leben = w; in das Attribut.
Suche zuerst die Wörter private, return und void im Quelltext: Diese zeigen dir drei der gefragten Zeilen.
Die Prüfung ist die Zeile mit if und den beiden Vergleichen. Die Zuweisung steht in der Zeile direkt darunter im if-Block.
A2
Die Lampe nach dem Aufruf
AFB II

Die Lampe eines Schreibtischs wird von dieser Klasse gesteuert:

public class Lampe {
  private int stufe;
  public Lampe() {
    stufe = 20;
  }
  public void setStufe(int stufe) {
    if (stufe >= 0 && stufe <= 100) {
      stufe = stufe;
    }
  }
  public int getStufe() {
    return stufe;
  }
}
Lampe l = new Lampe();
l.setStufe(80);

Untersuche das Programm: Welche Objektkarte zeigt den Zustand von l nach diesen beiden Zeilen?

Klicke die passende Karte an und prüfe dann. Mit der Tastatur: Tab zur Karte, Enter auswählen.
Der Parameter heißt wie das Attribut. In stufe = stufe; (ohne this) steht links und rechts der Parameter: Er wird nur sich selbst zugewiesen, das Attribut behält den Wert 20 aus dem Konstruktor. Karte B stimmt.
Verfolge zuerst den Konstruktor: Welchen Wert hat stufe, bevor setStufe aufgerufen wird?
Prüfe die Zeile in der if-Anweisung genau: Welche der beiden Variablen namens stufe steht links vom Gleichheitszeichen, und was passiert mit dem Attribut?
A3
Warum private?
AFB I

Die Software einer Tierarztpraxis nutzt diese Klasse. Welche Aussagen zur Datenkapselung stimmen?

Tier
  • - name: Zeichenkette
  • - gewichtKg: Fließkommazahl
  • c Tier(name: Zeichenkette, gewichtKg: Fließkommazahl)
  • + getName(): Zeichenkette
  • + getGewichtKg(): Fließkommazahl
  • + setGewichtKg(gewichtKg: Fließkommazahl)
Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
private verbietet nur den direkten Zugriff von außen — über öffentliche Methoden wie den Getter darf der Wert sehr wohl nach außen. Getter und Setter sind unabhängig: Lässt man den Setter weg, ist das Attribut nur lesbar (hier: der Name). Mit Speicher oder Geschwindigkeit hat Kapselung nichts zu tun; es geht darum, dass das Objekt immer einen gültigen Zustand hat.
Ansatz: Unterscheide: direkter Zugriff auf das Attribut vs. Zugriff über eine öffentliche Methode.
Weiter: Was passiert, wenn es einen Getter, aber keinen Setter gibt? Und wo könnte man eine Prüfung wie „Gewicht > 0“ unterbringen?