Aufgabe Vorschlag B - 1 - Klassendiagramme und Objektdiag… · Abitur Hessen Praktische Informatik LK 2021
Thema: Klassendiagramme und Objektdiagramme · Aus der Prüfung LK (2021)
Aufgabenstellung
Kinocenter
Für das Management des Vorstellungsbetriebs eines Kinocenters sollen eine Client-Server-Anwendung und eine Datenbank entwickelt werden.
Material 1: UML-Klassendiagramm
Hinweis: Auf alle Attribute kann mittels get-Methoden zugegriffen werden.
Material 2: Klassendokumentationen
Klasse List
List<T>() erzeugt eine generische Liste mit Elementen des Typs T
add(obj: T) hängt das Objekt obj vom Typ T am Ende der Liste an.
add(index: int, obj: T) fügt das Objekt obj vom Typ T an der Position index in die Liste ein.
contains(obj: T): boolean liefert true, wenn das Objekt obj in der Liste enthalten ist, sonst false.
get(index: int): T liefert das Listenelement an der Position index zurück bzw. null, falls index negativ oder größer gleich der Anzahl der momentan enthaltenen Elemente ist.
remove(index: int): T entfernt das Listenelement an der Position index. Liefert das entfernte Element zurück bzw. null, falls index negativ oder größer gleich der Anzahl der momentan enthaltenen Elemente ist.
remove(obj: T): boolean entfernt das Objekt obj aus der Liste. Falls obj mehrmals in der Liste enthalten ist, wird nur das erste entfernt. Der Rückgabewert ist true, falls das Objekt gefunden und entfernt wurde, sonst false.
size(): int liefert die Anzahl der Elemente in der Liste zurück.
Klasse DateTime
DateTime() erzeugt ein DateTime-Objekt mit dem aktuellen Systemdatum und der Systemuhrzeit, im Format dd.mm.yyyy hh:mm.
compareTo(dt: DateTime): int Vergleicht Datum und Uhrzeit des DateTime-Objekts mit dem des Parameters dt und liefert einen int-Wert:
< 0 wenn das Datum des DateTime-Objekts vor dem des Parameters dt liegt
= 0 wenn das Datum des DateTime-Objekts gleich dem von dt ist
> 0 wenn das Datum des DateTime-Objekts nach dem des Parameters dt liegt
isAfter(date: DateTime): boolean liefert true, wenn das DateTime-Objekt nach dem des Parameters dt liegt
isBefore(date: DateTime): boolean liefert true, wenn das DateTime-Objekt vor dem des Parameters dt liegt
isEqual(dt: DateTime): boolean liefert true, wenn das DateTime-Objekt gleich dem des Parameters dt ist
Klasse ServerSocket
ServerSocket(localPort: int) erzeugt einen Server-Socket und bindet ihn an den angegebenen Port.
accept(): Socket wartet darauf, dass ein Client eine Verbindung aufbauen will. Wurde eine Verbindung aufgebaut, liefert die Methode das entsprechende Socket-Objekt.
close() schließt den Server-Socket.
Klasse Socket
Socket(remoteHostIP: String, remotePort: int) erzeugt ein Socket-Objekt.
connect(): boolean stellt eine Verbindung zum RemoteHost her; liefert true, wenn eine Verbindung hergestellt werden konnte.
readLine(): String liest eine Zeile vom Socket, bzw. liefert null, wenn der Socket nicht geöffnet ist. Eine Zeile wird durch ein Zeilenendezeichen abgeschlossen; das Zeilenendezeichen wird jedoch nicht in den zurückgegebenen String übernommen. Die Methode blockiert, bis eine komplette Zeile eingelesen ist.
write(s: String) schreibt einen String zum Socket; ist die Schnittstelle nicht geöffnet geschieht nichts.
close() löst die Verbindung auf.
Material 3: Sitzplan und Sitzbelegung
Beispielhafter Sitzplan des Kinosaals 3 mit 9 Reihen und 25 Sitzen pro Reihe
Hinweise: Die Nummer eines Sitzes setzt sich aus der Nummer der Reihe und der zweistelligen Nummer des Sitzes innerhalb der Reihe zusammen. Die Reihe 1 ist vorne im Saal, die Reihe 9 hinten.
Beispielhafte Sitzbelegung einer Vorstellung in diesem Kinosaal
Hinweis: true bedeutet der Sitz ist frei, false bedeutet der Sitz ist belegt. Der default-Wert einer Variablen des Typs boolean ist false.
Material 4: Vorlage UML-Sequenzdiagramm
Material 5: Beispiele für Kinokarten
Hinweis: Mehrere Karten können zusammen gekauft werden, sie haben dann dasselbe Kaufdatum, dieselbe Kaufuhrzeit sowie dieselbe ID. Jede Kinokarte verfügt darüber hinaus über eine individuelle, eindeutige Nummer, die von 1 ab fortlaufend hochgezählt wird.
Material 6: Vorlage UML-Klassendiagramm des Kartenkaufs
1.5 Kinokarten werden für eine Vorstellung gekauft. In Material 5 sind zwei Kinokarten beispielhaft dargestellt. Alle notwendigen Informationen für den Kauf von Kinokarten sollen in das UML-Modell des Anwendungssystems aufgenommen werden.
1.5.1
Entwickeln und zeichnen Sie ein UML-Objektdiagramm für die Kinokarten aus Material 5.
Hinweis: Ein Teil der Objekte bezieht sich auf existierende Klassen (Material 1). Fehlende Attributwerte sind sinnvoll zu ergänzen.
1.5.2
Der Kinomanager (Klasse KinoManager in Material 1) kennt alle Kartenkäufe und ist zuständig für das Erstellen und Stornieren von Kartenkäufen. In einem Kartenkauf können mehrere Karten für eine Vorstellung erworben werden. Der Gesamtpreis eines Kartenkaufs kann berechnet werden.
Entwickeln Sie das erweiterte UML-Klassendiagramm unter Berücksichtigung von Material 1 und Material 5 und zeichnen Sie die Erweiterungen vorhandener Klassen sowie neue Klassen mit Attributen (Sichtbarkeit und Datentypen), Methoden (Sichtbarkeit, Parameter und Rückgabetypen) und den Assoziationen (Navigierbarkeit, Multiplizitäten und Rollen).
Hinweis: Eine Vorlage ist in Material 6 zu finden.

Lösung
Nach den offiziellen Korrekturhinweisen
1.5.1 & 1.5.2 UML-Objektdiagramm und erweitertes UML-Klassendiagramm
Lösung: 1.5.1 Objektdiagramm: Das Objektdiagramm stellt die konkrete Belegung und die Instanzen für die Kinokarten dar: - Ein Objekt `:Kinosaal` mit Attributwerten (z. B. `nr = 3`, `reihen = 9`, `sitzeProReihe = 25`). - Ein Objekt `:Film` mit `titel = "Der weiße Hai"`, `produktionsjahr = 1975`, `laenge = 111`. - Ein Objekt `:Vorstellung` mit `datumUhrzeit = 2021-03-03;20:00:00`, `sitzbelegung = true; true; ...`, verknüpft mit `:Kinosaal` und `:Film`. - Ein Objekt `:Kartenkauf` mit `id = B20200320001` und `zeitpunkt = 2021-03-02;19:05:00`, verknüpft mit `:Vorstellung`. - Zwei Objekte `:Kinokarte`, jeweils verbunden mit dem `:Kartenkauf`: * Erste Karte: `kartennummer = 477343`, `sitznummer = 301`, `preis = 10`. * Zweite Karte: `kartennummer = 477344`, `sitznummer = 302`, `preis = 7`. 1.5.2 Erweitertes Klassendiagramm: Erweiterungen der vorhandenen Klassen: - `KinoManager`: * `+ erstelleKartenkauf(vorst : Vorstellung, sitzNr : int, anzahl : int, anzahlErmaessigt : int) : Kartenkauf` * `+ zeigeKartenkauf(id : int) : Kartenkauf` (optional) * `+ storniereKartenkauf(id : int) : boolean` * Assoziation zu `Kartenkauf`: `1` nach `*` (Rolle `- kartenkaeufe`, navigierbar). - `Vorstellung`: * `- ERMAESSIGUNG : double = 3.00` * `+ einfuegenKartenkauf(kk : Kartenkauf)` * Assoziation zu `Kartenkauf`: bidirektional, `1` (`- vorstellung`) zu `*` (`- kartenkaeufe`). Neue Klassen: - `Kartenkauf`: * Attribute: `- id : int`, `- zeitpunkt : DateTime` * Methoden: `+ Kartenkauf(vorstellung : Vorstellung, sitzNr : int, anzahl : int, anzahlErmaessigt : int)`, `+ berechneGesamtpreis() : double` * Komposition zu `Kinokarte`: Multiplizität `1..*`, Rolle `- karten`. - `Kinokarte`: * Attribute: `- autonr : int` (statisch/unterstrichen), `- kartennummer : int`, `- sitznummer : int`, `- preis : double`, `- preisart : String` * Konstruktor: `+ Kinokarte(sitznummer : int, preisart : String)`
Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium
Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.
‹ Aufgabe Vorschlag A - 1 - Klassendiagramme und Objektdiag… · LK 2021 · Aufgabe Vorschlag C - 1 - Klassendiagramme und Objektdiag… · LK 2021 ›