MINT lernen

Klassen und Objekte

Wie kann es sein, dass du Handy b auflädst — und danach der Akku von Handy a voller ist?

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Zehn Ü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
Bauplan und Exemplar
AFB I

Ein Fahrradverleih-Programm hat eine Klasse Fahrrad und erzeugt daraus mehrere Objekte. Welche Aussagen stimmen?

Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Die Klasse ist der Bauplan, das Objekt das gebaute Exemplar. Ein Bauplan für Fahrräder kann man nicht fahren — aber man kann nach ihm beliebig viele Räder bauen. Jedes Objekt hat seine eigenen Attributwerte; eine Methode wie ausleihen() ändert nur das Objekt, an dem sie aufgerufen wird.
Ansatz: Denk an Plätzchen: Die Ausstechform ist die Klasse, die Plätzchen sind die Objekte.
Weiter: Wenn ein Plätzchen Zuckerguss bekommt — haben dann alle anderen auch welchen?
A2
Die Musik-App
AFB I

Eine Musik-App wird objektorientiert programmiert. Ordne jede Karte zu: Ist das eine Klasse, ein Objekt, ein Attribut oder eine Methode?

Ziehe jede Karte in den passenden Korb — oder wähle sie mit Enter aus und drücke dann die Ziffer des Korbs (0 legt sie zurück).
1Klasse
2Objekt
3Attribut
4Methode
Klassennamen beginnen mit einem Großbuchstaben und stehen für eine ganze Sorte von Dingen. Ein Objekt ist ein konkretes Exemplar mit eigenen Werten. Attribute sind Eigenschaften (Substantive), Methoden sind Fähigkeiten (Verben, mit Klammern). Typischer Fehler: „Flowers“ für eine Klasse halten — es ist nur ein Song unter vielen.
Ansatz: Frage: Ist das eine Sorte (Klasse) oder ein ganz bestimmtes Ding (Objekt)?
Weiter: Hat es runde Klammern und beschreibt eine Tätigkeit? Dann ist es eine Methode.
A3
Was bei new passiert
AFB I

Die Anweisung Spind s1 = new Spind(117, "Mia"); in der Schulverwaltung — setze die Fachbegriffe ein. Ein Wort bleibt übrig.

Wort anklicken, dann Lücke anklicken (oder umgekehrt) — mit Tab und Enter geht es genauso. Ein Klick auf eine gefüllte Lücke legt das Wort zurück.

Das Schlüsselwort erzeugt ein neues . Dabei läuft der und füllt die mit den Startwerten 117 und „Mia“. Die Variable s1 danach auf das neue Spind-Exemplar.

„Klasse“ bleibt übrig: Die Klasse Spind gibt es schon — sie wird durch new nicht neu erzeugt, sondern als Bauplan benutzt. Wichtig ist auch das Wort „verweist“: s1 ist nicht das Objekt, sondern zeigt darauf wie ein Pfeil.
Ansatz: Die Methode, die beim Erzeugen automatisch läuft und so heißt wie die Klasse, hat einen eigenen Namen.
Weiter: 117 und „Mia“ sind Werte für die Eigenschaften des Spinds — wie nennt man diese Eigenschaften?
A4
Was macht diese Zeile?
AFB II

Die Klasse Spind hat den Konstruktor Spind(int nummer, String name) und die Methoden abschliessen(), oeffnen() und istAbgeschlossen(). Verbinde jede Zeile mit ihrer Wirkung.

Ansatz: Zähle, in welchen Zeilen new vorkommt — nur dort entsteht ein Objekt.
Weiter: Steht links vom new eine Variable? Wenn nicht, wohin zeigt dann der Pfeil?
A5
Zwei Handys, zwei Akkus
AFB II

Lea und Tim haben je ein Handy. Beim Spielen sinkt der Akku um die Hälfte der Minuten, Laden bringt 30 Prozentpunkte (höchstens 100).

public class Handy {
    private String besitzer;
    private int akku;

    public Handy(String besitzer, int akku) {
        this.besitzer = besitzer;
        this.akku = akku;
    }

    public void laden() {
        akku = akku + 30;
        if (akku > 100) {
            akku = 100;
        }
    }

    public void spielen(int minuten) {
        akku = akku - minuten / 2;
    }

    public int getAkku() {
        return akku;
    }
}
Handy lea = new Handy("Lea", 40);
Handy tim = new Handy("Tim", 90);
lea.spielen(30);
tim.laden();
lea.laden();
tim.spielen(50);
lea.spielen(9);
Rechne die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. Leas Akku direkt nach lea.spielen(30) %
  2. Tims Akku direkt nach tim.laden() %
  3. Leas Akku ganz am Ende %
  4. Transfer: Wie viele Minuten muss Tim danach mindestens spielen, damit sein Akku 0 zeigt? min
Lea: 40 − 15 = 25 → 55 → 55 − 9 / 2 = 55 − 4 = 51 (Ganzzahldivision!). Tim: 90 + 30 = 120 wird auf 100 begrenzt → 100 − 25 = 75. Jede Methode ändert nur das Objekt, an dem sie aufgerufen wird — Leas Aufrufe lassen Tims Akku völlig unberührt. Für 0 % braucht Tim 75 · 2 = 150 Minuten; mit 149 blieben 75 − 74 = 1.
Ansatz: Lege zwei Spalten an — „lea.akku“ und „tim.akku“ — und ändere bei jedem Aufruf nur die passende.
Weiter: minuten / 2 ist eine Division mit zwei ints. Was ergibt 9 / 2?
A6
Fehlersuche in der Spindverwaltung
AFB II

Die Klasse Spind ist wie in A4. Drei Zeilen in main lassen sich nicht übersetzen.

In diesem Text stecken Fehler. Klicke genau die falschen Zeilen an — die richtigen musst du stehen lassen.
Der häufigste Denkfehler ist Zeile 4: Die Klasse ist nur der Bauplan — abschließen kann man nur einen bestimmten Spind. Welcher sollte es auch sein? Zeile 7 ist erlaubt: u zeigt danach auf denselben Spind wie s.
Ansatz: Vergleiche jeden Konstruktoraufruf mit Spind(int nummer, String name).
Weiter: Vor dem Punkt eines Methodenaufrufs muss ein Objekt stehen, dahinter Name und Klammern.
A7
Wessen Handy ändert sich?
AFB II

Mit der Klasse Handy aus A5 wird ausgeführt:

Handy lea = new Handy("Lea", 40);
Handy tim = new Handy("Tim", 90);
Handy x = tim;

Welches Objekt ändert seinen Akkustand durch die jeweilige Zeile?

Setze pro Zeile genau ein Kreuz. Enter setzt und löscht.
ZeileLeas HandyTims Handykeins davon
lea.laden();
tim.spielen(20);
x.spielen(10);
Handy neu = new Handy("Lea", 40);
int a = lea.getAkku();
x ist kein drittes Handy, sondern ein zweiter Name für Tims Handy — x.spielen(10) leert also Tims Akku. Ein neues Objekt mit denselben Werten wie Leas Handy ist trotzdem ein anderes Objekt; Leas Handy bleibt unverändert. Ein Getter liest nur und ändert nichts.
Ansatz: Zeichne die Variablen als Pfeile auf die Objekte. Wohin zeigt x?
Weiter: Jedes new baut ein weiteres Objekt. Und welche Methode ändert den Akku gar nicht?
A8
Die Trinkflasche beim Sportfest
AFB IIIMix

Objekte treffen auf Schleifen (1.1.3) und Methoden mit Parametern (1.1.4).

public class Flasche {
    private int inhalt;

    public Flasche(int inhalt) {
        this.inhalt = inhalt;
    }

    public void trinken(int ml) {
        if (ml <= inhalt) {
            inhalt = inhalt - ml;
        }
    }

    public void auffuellen() {
        inhalt = 750;
    }

    public int getInhalt() {
        return inhalt;
    }
}
Flasche f = new Flasche(750);
for (int i = 0; i < 4; i++) {
    f.trinken(200);
}
System.out.println(f.getInhalt());
f.auffuellen();
f.trinken(300);
f.trinken(300);
f.trinken(300);
System.out.println(f.getInhalt());
Trage die Zahlen ein und klicke auf „Prüfen“ — Enter geht auch.

Erste Ausgabe: ml

So oft wurde in der Schleife wirklich getrunken:

Zweite Ausgabe: ml

Die Schleife ruft trinken(200) viermal auf: 750 → 550 → 350 → 150; beim vierten Mal ist 200 <= 150 falsch, es passiert nichts. Wer 4 · 200 abzieht, landet bei −50 — genau das verhindert die Prüfung im Objekt. Nach dem Auffüllen: 750 → 450 → 150, der dritte Schluck scheitert wieder. Zweimal 150 — aus ganz verschiedenen Gründen.
Ansatz: Schreibe nach jedem trinken-Aufruf den Inhalt auf. Prüfe vorher jedes Mal: ml <= inhalt?
Weiter: Die Schleife läuft für i = 0, 1, 2, 3. Nicht jeder Aufruf ändert den Inhalt.
A9
Programm nach Auftrag
AFB III

Auftrag (Klasse Spind wie in A4): „Erzeuge zuerst einen Spind für Ole (Nr. 4), dann einen für Pia (Nr. 5). Schließe nur Pias Spind ab. Gib dann aus, ob Oles Spind abgeschlossen ist.“ Baue das Programm — drei Bausteine bleiben übrig.

Setze das Programm von oben nach unten zusammen. Ein Klick legt den Baustein auf den nächsten freien Platz, ein Klick im Programm legt ihn zurück. Enter funktioniert genauso.
Das Programm gibt false aus: Abgeschlossen wurde nur Pias Spind, Oles Objekt ist davon unberührt. Die Ablenker sind die drei klassischen Fehler: Methode an der Klasse aufrufen, das falsche Objekt ändern, new vergessen.
Ansatz: Gehe den Auftrag Satz für Satz durch — jeder Satz wird genau eine Zeile.
Weiter: Prüfe bei jedem Baustein: Wird übersetzt? Trifft er das richtige Objekt?
A10
Trick: Anas Handy
AFB IIITrick

Mit der Klasse Handy aus A5 (Laden: +30, höchstens 100):

Handy a = new Handy("Ana", 20);
Handy b = a;
b.laden();
Handy c = new Handy("Ana", 20);
c.laden();
a.laden();
System.out.println(a.getAkku());

Welche Zahl wird ausgegeben?

Überlege selbst und trage das Ergebnis ein — Enter prüft direkt.
Ausgegeben wird 80. b = a erzeugt kein zweites Handy — a und b zeigen auf dasselbe Objekt. b.laden() lädt also Anas Handy: 20 → 50, danach a.laden(): 80. c ist dagegen ein eigenes Objekt mit zufällig denselben Startwerten; sein Laden wirkt nur auf c (50). Wer b für eine Kopie hält, kommt auf 50; wer c für dasselbe Handy hält, auf 100.
Ansatz: Zähle die new: Wie viele Handy-Objekte gibt es wirklich?
Weiter: Zeichne Pfeile von a, b und c auf die Objekte und verfolge jedes laden().