MINT lernen

Abituraufgaben: Klassen und Objekte im Abitur

Diagramme erstellen, Objektkarten zeichnen, Operationen implementieren.

Dein Fortschritt:
0 / 0 Aufgaben
1

Fahrradverleih

AFB I–II

Ein 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:

Rad
- nummer: Ganzzahl
- typ: Zeichenkette
- tagespreis: Fließkommazahl
- ausleiher: Kunde
c Rad(n: Ganzzahl, t: Zeichenkette, p: Fließkommazahl)
+ istFrei(): Wahrheitswert
+ verleiheAn(k: Kunde)
+ getTagespreis(): Fließkommazahl
  1. Erstellen Sie ein Klassendiagramm der Klasse Kunde mit sinnvollen Attributen und Operationen und zeichnen Sie die Assoziation zu Rad ein.
  2. Stellen Sie eine Objektkarte eines Kunden „Mia“ dar, die die Räder r4 und r9 geliehen hat.
  3. Implementieren Sie die Operationen istFrei() und verleiheAn(k: Kunde). Ein Rad darf nur verliehen werden, wenn es frei ist.

Hinweise

Hinweis zu Aufgabe a)
Mehrere Räder gleichzeitig: Welche Datenstruktur passt als Attributtyp?
Hinweis zu Aufgabe b)
Attributnamen aus Ihrem Diagramm übernehmen, Verweise als Objektnamen.
Hinweis zu Aufgabe c)
Frei heißt: kein Ausleiher gespeichert (null bzw. None).

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
Kunde
- name: Zeichenkette
- raeder: dyn. Reihung vom Inhaltstyp Rad
c Kunde(n: Zeichenkette)
+ 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)
k1 : Kunde
name = "Mia"
raeder = [r4, r9]
Erwartungshorizont zu Aufgabe c)
def istFrei(self):
    return self.__ausleiher is None

def verleiheAn(self, k):
    if self.istFrei():
        self.__ausleiher = k

Java analog mit return ausleiher == null;. Die Prüfung vor dem Verleihen ist verlangt.

2

Warteschlange im Bürgeramt

AFB II–III

Ein 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.

Amt
- tickets: dyn. Reihung vom Inhaltstyp Ticket
- naechsteNr: Ganzzahl
c Amt()
+ ziehe(anliegen: Zeichenkette): Ticket
+ rufeAuf(): Ticket
+ anzahlWartende(): Ganzzahl
Ticket
- nr: Ganzzahl
- anliegen: Zeichenkette
c Ticket(n: Ganzzahl, a: Zeichenkette)
+ getNr(): Ganzzahl
+ getAnliegen(): Zeichenkette
  1. Erläutern Sie, warum naechsteNr privat und nicht öffentlich deklariert ist.
  2. 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).
  3. Beurteilen Sie, ob statt der dynamischen Reihung eine Schlange (Queue) die bessere Wahl wäre.

Hinweise

Hinweis zu Aufgabe a)
Was könnte eine andere Klasse mit einem öffentlichen Zähler anstellen?
Hinweis zu Aufgabe b)
Das älteste Ticket steht bei Index 0. Vorher prüfen, ob die Reihung leer ist.
Hinweis zu Aufgabe c)
Welche Operationen braucht das Amt wirklich — und welche bietet eine Queue?

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)
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.