Labof – Assoziationen: Weinfass und Weinkeller
Theorie dazu: Assoziationen — Beziehungen zwischen Klassen.
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 einfachtoString()
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 selbefass
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 wirdnull
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.