MINT üben

Primitive Typen und Referenzen

Zwei Variablen, ein Objekt: Wer den Unterschied zwischen Wert und Referenz kennt, findet Fehler, die der Compiler nie meldet.

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
Das passende Speicherbild
AFB I

Die Heizungssteuerung eines Hauses führt diese Zeilen aus. Ein Ofen regelt einen Raum. Die Klasse Ofen hat den Konstruktor Ofen(soll: Ganzzahl) und die Methode setSoll(wert).

Ofen o1 = new Ofen(20);
Ofen o2 = o1;
o2.setSoll(24);

Nenne das Speicherbild, das nach diesen drei Zeilen stimmt.

Klicke die passende Karte an und prüfe dann. Mit der Tastatur: Tab zur Karte, Enter auswählen.
Es gibt nur ein Objekt: o2 = o1 kopiert die Referenz, kein zweiter Ofen entsteht. setSoll verändert genau dieses Objekt, also steht dort soll = 24, und beide Variablen zeigen darauf. Bei A wäre ein zweites Objekt entstanden, bei B hätte setSoll nichts bewirkt, und bei D würden die Variablen den Wert selbst enthalten, wie bei int.
Zähle die Wörter new in den drei Zeilen: So viele Objekte gibt es.
Die zweite Zeile kopiert nur die Referenz. Die dritte Zeile ändert das Objekt, auf das beide Variablen zeigen.
A2
Zugriff auf den Heizöltank
AFB IIMix

Die Klasse Tank hat das Attribut private int liter, die Aufträge tanken(menge) und leeren(menge), die liter ändern, sowie die Anfragen getLiter() und istLeer(). Ein anderes Programm führt vorher aus:

Tank t1 = new Tank(100);
Tank t2 = t1;

Ordne jeden der folgenden Aufrufe ein: Was geschieht? Setze pro Zeile ein Kreuz.

Setze in jeder Zeile das passende Kreuz — hier ist es genau eins pro Zeile. Enter setzt und löscht.
AufrufändertliestFehler
t2.tanken(40);
t1.getLiter();
t2.liter = 0;
t1.leeren(30);
t2.istLeer();
tanken und leeren sind Aufträge: Diese verändern den einen Tank, den t1 und t2 gemeinsam meinen (ändert). getLiter und istLeer lesen nur (liest). Auf ein private-Attribut darf man von außen nicht zugreifen, deshalb ist t2.liter = 0 ein Compiler-Fehler (Fehler). Die Datenkapselung gilt für jeden Alias.
Aufträge ändern das Objekt, Anfragen lesen nur. Für Zugriffe von außen gilt die Sichtbarkeit des Attributs.
private-Attribute sind nur innerhalb der Klasse sichtbar. Ein direkter Zugriff über t2.liter lässt sich nicht übersetzen.
A3
Zählen im Bücherregal
AFB I

Eine Bibliothek verwaltet Bücher mit der Klasse Buch. Die Schülerin beschreibt, was nach diesen vier Zeilen im Speicher liegt. Zwei ihrer Zahlen sind falsch. Gib die falschen Aussagen an und trage die richtige Zahl ein.

Buch a = new Buch("Momo");
Buch b = a;
Buch c = new Buch("Momo");
Buch d = null;
Klicke die Zeilen an, die du für falsch hältst — dabei klappt ein Feld für die Korrektur auf. Geprüft wird beides: die Auswahl und die Korrekturen.
Nur die beiden Zeilen mit new erzeugen Objekte: Es gibt 2 Objekte, nicht 3. b = a legt nur einen Alias an. d = null zeigt auf 0 Objekte. a und b zeigen auf das erste Objekt, c als einzige Variable auf das zweite.
Zähle zuerst die Wörter new: So viele Objekte entstehen. Prüfe dann jede Variable einzeln.
b = a erzeugt kein Objekt, sondern einen zweiten Namen. Bei d = null zeigt die Variable auf kein Objekt.