MINT üben

Eine Klasse implementieren

Zwei Abituraufgaben mit Hinweisen und Erwartungshorizont: Klassen nach Diagramm in Java implementieren – Gewächshaus und Kfz-Werkstatt.

Dein Fortschritt:
0 / 0 Aufgaben
1

Pflanzen im Schulgewächshaus

AFB I–II

Die Garten-AG simuliert das Wachstum ihrer Pflanzen im Schulgewächshaus. Jede Pflanze hat einen Wasserstand in Prozent (0 bis 100) und eine Höhe in Zentimetern. Je nach Art verbraucht sie pro Tag unterschiedlich viel Wasser. Eine neue Pflanze startet mit einem Wasserstand von 50 und einer Höhe von 5,0 cm.

Die Methoden sollen sich so verhalten: giessen(menge) erhöht den Wasserstand um die angegebene Menge, jedoch höchstens auf 100; nicht positive Mengen bleiben ohne Wirkung. tagVergeht() verringert den Wasserstand um den Tagesverbrauch, jedoch nicht unter 0. Liegt der Wasserstand danach bei mindestens 30, wächst die Pflanze um 0,5 cm. brauchtWasser() liefert genau dann true, wenn der Wasserstand unter 30 liegt.

Material 1: Klassenkarte und begonnene Implementierung
Pflanze
  • - name: Zeichenkette
  • - wasserstand: Ganzzahl
  • - hoehe: Fließkommazahl
  • - verbrauch: Ganzzahl
  • c Pflanze(name: Zeichenkette, verbrauch: Ganzzahl)
  • + giessen(menge: Ganzzahl)
  • + tagVergeht()
  • + getWasserstand(): Ganzzahl
  • + getHoehe(): Fließkommazahl
  • + brauchtWasser(): Wahrheitswert
public class Pflanze {
    private String name;
    private int wasserstand;
    private double hoehe;
    private int verbrauch;

    public Pflanze(String name, int verbrauch) {
        this.name = name;
        this.verbrauch = verbrauch;
        wasserstand = 50;
        hoehe = 5.0;
    }

    // hier fehlen die Methoden
}
Attribute und Konstruktor sind bereits implementiert.
Material 2: Testprogramm und Konstruktor-Entwurf eines Mitschülers
Pflanze p = new Pflanze("Basilikum", 15);
p.tagVergeht();
p.tagVergeht();
System.out.println(p.brauchtWasser());
p.giessen(90);
p.tagVergeht();
System.out.println(p.getWasserstand() + " / " + p.getHoehe());
// Entwurf von Ben (Ausschnitt)
public void Pflanze(String name, int verbrauch) {
    name = name;
    verbrauch = verbrauch;
    wasserstand = 50;
    hoehe = 5.0;
}

public int getWasserstand() {
    wasserstand;
}
Oben: Test der AG. Unten: Bens eigener Versuch, die Klasse zu schreiben; markierte Stellen sind fehlerhaft.
  1. Ergänzen Sie die Klasse aus Material 1 um die fünf im Diagramm angegebenen Methoden gemäß der Beschreibung.
  2. Ermitteln Sie die beiden Ausgaben des Testprogramms aus Material 2. Notieren Sie dazu nach jedem Aufruf den Wasserstand und die Höhe.
  3. Erklären Sie für jede markierte Stelle in Bens Entwurf, warum sie fehlerhaft ist und welche Folge sie hat, und geben Sie jeweils eine Korrektur an.

Hinweise

Hinweis zu Aufgabe a)
Übersetze jede Zeile der Klassenkarte: kein Rückgabetyp im Diagramm → void; Ganzzahl → int, Wahrheitswert → boolean. Für „höchstens 100“ bzw. „nicht unter 0“ brauchst du nach der Rechnung eine if-Abfrage. Anfragen enden mit return.„Ergänzen“ heißt: die vorgegebene Lösung beibehalten und nach den Vorgaben erweitern – Attribute und Konstruktor nicht neu schreiben.
Hinweis zu Aufgabe b)
Starte bei Wasserstand 50 und Höhe 5,0. Achte bei tagVergeht() auf die Reihenfolge: erst Wasser abziehen, dann prüfen, ob gewachsen wird. Und beim Gießen: Gibt es eine Obergrenze?
Hinweis zu Aufgabe c)
Drei verschiedene Fehlerarten: Was unterscheidet einen Konstruktor von einer Methode? Welche Variable ist gemeint, wenn Parameter und Attribut gleich heißen? Was muss eine Methode mit Rückgabetyp int immer enthalten?„Erklären“ heißt: den Fehler auf die zugrunde liegende Regel von Java zurückführen, nicht nur die Korrektur hinschreiben.