Labof – Assoziationen: Weinfass und Weinkeller

Es ist die Simulation eines Weinkellers zu erstellen. Diese besteht aus 2 Klassen: WeinFass und WeinKeller.

Fehlermeldungen sollten folgende Infos enthalten: Die Einleitungsworte FEHLER in nameDerLaufendenMethode(..), die übertretene Bedingung als Text und der/die ungültige(n)/inkonsistente(n) Wert(e).

1. Klasse WeinFass

  • Hat die Eigenschaften name ( != null, Länge 6-20 Zeichen) kapazitaet (> 0) und inhalt (0..Kapazität) - beides in ganzen Litern.

  • Es gibt 2 Konstruktoren: einen Standardkonstruktor mit den Standardwerten "--namenlos--", 200 und 0 und einen weiteren mit den 3 Eigenschafts-Parametern.

    In den Konstruktoren sind die Setter zu verwenden.

Wenn mehrere Parameter Einfluss aufeinander haben (hier hat kapazitaet Einfluss auf die Obergrenze von inhalt), muss darauf geachtet werden, dass der Setter diesen Zusammenhang bei der Prüfung beachtet. (Hier könnte nachträgliches Verkleinern der Kapazität den aktuellen Inhalt plötzlich unzulässig machen).

Daher nutzen wir hier in den beiden betroffenen Settern die Methode String checkOk(int kapazitaet, int inhalt).
Der jeweils "fremde" Wert wird aus dem Attribut genommen, der "eigene" aus dem Übergabeparameter des Setters.

Diese prüft, ob Kapazität > 0, Inhalt >= 0 und ob Inhalt ⇐ Kapazität. Wenn eine Bedingung übertreten ist, wird eine aussagekräftige Fehlermeldung als Rückgabewert geliefert, wenn alles passt, wird null zurückgeliefert.

Fast die gesamte Prüf-Intelligenz liegt in dieser Methode.
Setter müssen nur mehr prüfen, ob der Rückgabewert von checkOk(…​) einen Text != null enthält, um bei null den Wert zu setzen oder anderenfalls die gelieferte Fehlermeldung in die eigene einzubetten (beachte die obige Regel für Fehlermeldungen!!). Bei Fehler wird der Wert nicht geändert.

Getter werden v.a. in der Testklasse benötigt.

Es gibt 4 weitere Methoden: abzapfen() und fassFuellen(), toString() und printInfo(..).

  • Methode abzapfen() entnimmt (wenn möglich) jeweils 1 Liter und liefert bei genügend Fass-Inhalt true, sonst false.

  • Methode fassFuellen() füllt das Fass wieder voll und liefert die nachgefüllte Menge als Rückgabewert.

  • Methode toString() liefert Status-Info in folgender Form (mit jeweils passenden Werten) zurück:
    WeinFass name: Burgunder2012, kapazitaet: 251 liter, inhalt: 17 liter

  • Methode printInfo() ruft einfach toString() auf und gibt den zurückgelieferten Text auf den Bildschirm aus.

2. Klasse WeinKeller

Der Keller hat Lagerplätze für 3 Weinfässer (3 Eigenschaften vom Typ WeinFass – fass1, fass2, fass3).

Es gibt einen Standard-Konstruktor, der einen leeren Keller bewirkt (fass1, fass2, fass3 haben Wert null).

Setter und „normale“ Getter werden nicht benötigt!

  • Methode boolean addFass(WeinFass fass) versucht, ein weiteres Fass im Keller einzulagern und liefert bei Erfolg true, sonst false zurück.

    Fehlschlagen kann dies, wenn das übergebene fass null ist, wenn kein Platz mehr im Keller ist oder wenn das selbe fass schon im Keller eingelagert ist.
    Dann ist eine präzise Fehlermeldung auszugeben.

  • Methode WeinFass removeFass(WeinFass fass) versucht, das gegebene Fass aus dem Keller zu entfernen.
    Wenn das gegebene Fass im Keller vorhanden ist, wird es entfernt und als ückgabewert geliefert, anderenfalls wird null zurückgeliefert.

  • Methode int getGesamtInhalt() liefert die gesamte derzeit verfügbare Weinmenge.

  • Methode int getGesamtKapazitaet() liefert die gesamte Kapazität (alle Fass-Kapazitäten).

  • Methode int alleFuellen() füllt alle Fässer auf und liefert die gesamte benötigte Nachfüllmenge zurück.

  • Methode printInfo() gibt Die Kapazität und aktuellen Inhalt des Kellers und die Daten aller vorhandenen Fässer aus.

  • Methode WeinFass findeFassMitNamensBeginn(String txt) findet das erste Fass mit dem im Parameter txt gegebenen Namensbeginn.
    Dabei keine Unterscheidung Groß- und Kleinschreibung (alles wird vor Vergleich auf Kleinbuchstaben umgewandelt).
    Bei Erfolg wird das Fass zurückgegeben, sonst null.
    HINWEIS: Diese Methode enthält Lehrstoff, der noch nicht unterrichtet wurde. Muss erst danach umgesetzt werden!

3. Testklasse

Implementiere eine Testklasse TestenWeinKeller, die die mindestens die folgenden 4 Methoden enthält:

  • testNiceCasesWeinFass()

  • testBadCasesWeinFass()

  • testNiceCasesWeinKeller()

  • testBadCasesWeinKeller()

Weitere Hinweise zum Testen siehe Testen, 'this', Kommentare.