Fahrradverleih
AFB I–IIEin Fahrradverleih verwaltet seine Räder. Ein Rad hat eine Nummer, einen Typ (z. B. „E-Bike“) und einen Tagespreis. Es kann an einen Kunden ausgeliehen sein; ein Kunde hat einen Namen und kann mehrere Räder gleichzeitig leihen. Die Klasse Rad ist bereits modelliert:
- typ: Zeichenkette
- tagespreis: Fließkommazahl
- ausleiher: Kunde
+ istFrei(): Wahrheitswert
+ verleiheAn(k: Kunde)
+ getTagespreis(): Fließkommazahl
- Erstellen Sie ein Klassendiagramm der Klasse Kunde mit sinnvollen Attributen und Operationen und zeichnen Sie die Assoziation zu Rad ein.
- Stellen Sie eine Objektkarte eines Kunden „Mia“ dar, die die Räder r4 und r9 geliehen hat.
- Implementieren Sie die Operationen
istFrei()undverleiheAn(k: Kunde). Ein Rad darf nur verliehen werden, wenn es frei ist.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
- raeder: dyn. Reihung vom Inhaltstyp Rad
+ getName(): Zeichenkette
+ fuegeRadHinzu(r: Rad)
+ gibRadZurueck(r: Rad)
Assoziation als einfache Linie zwischen Kunde und Rad. Andere sinnvolle Operationen werden anerkannt; Sichtbarkeiten und Typen müssen vollständig sein.
Erwartungshorizont zu Aufgabe b)
raeder = [r4, r9]
Erwartungshorizont zu Aufgabe c)
def istFrei(self):
return self.__ausleiher is None
def verleiheAn(self, k):
if self.istFrei():
self.__ausleiher = kJava analog mit return ausleiher == null;. Die Prüfung vor dem Verleihen ist verlangt.
Warteschlange im Bürgeramt
AFB II–IIIEin Bürgeramt ruft Wartende per Nummer auf. Die Klasse Ticket speichert eine laufende Nummer und das Anliegen. Die Klasse Amt verwaltet alle Tickets in einer dynamischen Reihung tickets und einen Zähler naechsteNr.
- naechsteNr: Ganzzahl
+ ziehe(anliegen: Zeichenkette): Ticket
+ rufeAuf(): Ticket
+ anzahlWartende(): Ganzzahl
- anliegen: Zeichenkette
+ getNr(): Ganzzahl
+ getAnliegen(): Zeichenkette
- Erläutern Sie, warum
naechsteNrprivat und nicht öffentlich deklariert ist. - Entwerfen Sie ein Struktogramm für
rufeAuf(): Ticket: Das am längsten wartende Ticket wird entfernt und zurückgegeben; wartet niemand, wird kein Objekt zurückgegeben (null). - Beurteilen Sie, ob statt der dynamischen Reihung eine Schlange (Queue) die bessere Wahl wäre.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Nur die Klasse Amt soll Nummern vergeben. Wäre der Zähler öffentlich, könnte eine andere Klasse ihn zurücksetzen und doppelte Nummern erzeugen. Kapselung sichert einen gültigen Zustand.
Erwartungshorizont zu Aufgabe b)
rufeAuf(): Ticket
Erwartungshorizont zu Aufgabe c)
Die Tickets werden nach dem FIFO-Prinzip abgearbeitet — genau das leistet eine Queue mit enqueue und dequeue, Fehler beim Index sind ausgeschlossen. Für anzahlWartende() müsste man die Queue allerdings durchlaufen und wiederherstellen oder einen Zähler mitführen; die DynArray bietet getLength() direkt. Ein begründetes Urteil mit Abwägung wird erwartet.
