Eine Eventfirma, die Whalewatching betreibt, möchte ihre Touren mit einer neuen Software verwalten. Bei Touren können Touristen verschiedene Tiere beobachten: Grauwale, Buckelwale, Fleckendelfine und Große Tümmler (eine weitere Delfinart).
Grauwale und Buckelwale sind Bartenwale, sie treten meist als Einzeltiere auf, Delfine hingegen in Gruppen. Für jede Tierart wird festgehalten, ob sie unter Artenschutz steht. Für Einzeltiere werden auch ein Spitzname und das Alter aufgenommen.
Aus Marketinggründen sollen sich die Preise für eine Tour zukünftig nach den gesichteten Tieren richten. Dabei rechnet die Firma folgendermaßen: Jedes gesichtete Meerestier recht- fertigt einen bestimmten Preis. Für Tümmler wird 1EUR pro Tier der Gruppe veranschlagt, bei Fleckendelfinen 2EUR pro Tier der Gruppe, bei Grauwalen 100EUR und bei Buckelwalen 120EUR.
Der Preis für jede Tour beträgt aber mindestens 50EUR und höchstens 150EUR.
Derzeit stehen Buckelwale, Grauwale und Fleckendelfine unter Artenschutz. Für diese gelten besondere Beobachtungsbedingungen: Sollte eine Beobachtungstour auf einen jungen Buckel- oder Grauwal treffen, wird die Beobachtung dieses Tieres abgebrochen. Die Altersgrenzen richten sich hier nach der Art: Buckelwale bis zu einem Alter von 3 Jahren, Grauwale bis zu einem Alter von 2 Jahren. Bei Gruppen von geschützten Tieren wird abgebrochen, wenn die Gruppe fünf oder weniger Tiere umfasst.
Bei der Umsetzung der Software wird eine Klasse Tour
eingeführt, die die beobachteten
Sichtungen speichert. Darüber hinaus wird es unter anderem für jede beobachtbare Tierart
eine eigene Klasse geben.
Stellen Sie die Beziehungen zwischen den Klassen Bartenwal
, Buckelwal
,
Delfin, Fleckendelfin, Grauwal
, Tier
, Tour
und Tuemmler
in einem Klassendiagramm dar. Die Klassen sollen nur den Klassennamen, keine Attribute und Methoden enthalten. Gib außerdem an, ob bzw. welche Klassen abstrakt sind
und begründe deine Entscheidung.
alter
, spitzname
und gruppengroesse
deklariert werden müssen. Begründe deine Entscheidung.Delfin
und einen Konstruktor für
die Klasse Tuemmler
. Dem Konstruktor der Klasse Tuemmler
darf nur die Gruppengröße übergeben werden, weil Tümmler grundsätzlich nicht geschützt sind und immer 1EUR pro gesichtetes Tier kosten.
Wenn ein Boot sich einem oder mehreren Tieren nähert, wird die Methode
beobachten
der Klasse Tour
aufgerufen. Diese prüft, ob das Boot sich weiter den
Tieren nähern darf. Dazu ruft sie die Methode darfBeobachtetWerden()
des
gesichteten Tieres auf. Wenn die Annäherung erlaubt ist, trägt die Methode
beobachten das Tier in das Array sichtungen
ein; dieses Array bietet dabei immer
genügend Platz. Die Methode gibt zurück, ob die Beobachtung erlaubt ist.
beobachten(t: Tier): boolean
der Klasse Tour sowohl Grauwal- als auch Tuemmler-Objekte übergeben werden können.beobachten(t: Tier): boolean
der Klasse Tour.
Die Methode darfBeobachtetWerden(): boolean
gibt in der Klasse Tier
immer true
zurück. Da Fleckendelfine aus Artenschutzgründen nicht immer beobachtet werden dürfen, muss die Methode entweder in der Klasse Delfin
oder in der Klasse Fleckendelfin
überschrieben werden.
Nach Beendigung der Tour soll der Preis nach den oben beschriebenen Regeln berechnet werden.
berechneTourPreis(): int
in der Klasse Tour. Die Methode getPreis(): int
in der Klasse Bartenwal
liefert den Einzelpreis eines Tiers zurück, in der Klasse Delfin
liefert sie den Preis der gesamten Gruppezurück.
Zum Abschluss sollen die Teilnehmer eine Urkunde erhalten. Dort wird unter anderem die Anzahl der beobachteten Delfine und die Spitznamen der gesichteten Bartenwale aufgeführt.
Beispiel:
Sie haben 17 Delfine gesichtet. Sie haben die Bartenwale Wally Walter Walburga gesichtet.
Falls keine Delfine oder keine Bartenwale gesichtet werden, soll die entsprechende Zeile weggelassen werden. Du musst dich bei der Ausgabe nicht um Einzahl und Mehrzahl kümmern.
Implementiere eine Methode druckeZertifikat()
, die die gewünschte
Ausgabe erzeugt.
Hinweis: Du kannst davon ausgehen, dass für alle Attribute die entsprechenden
öffentlichen get
-Methoden existieren. Verwende die Methode
ausgeben(s: String)
, um eine Zeile Text ausdrucken zu lassen.