Aufgabe 1 - Objektorientierte Modellierung · Abitur NRW Informatik LK · Haupttermin 2021
Thema: Objektorientierte Modellierung mit Implementationsdiagrammen · Aus der Prüfung LK · Haupttermin (2021)
Aufgabenstellung
Aufgabenstellung: Wetterdatenverwaltung
Ein Projektkurs zum Thema „Klimawandel“ plant, eine Software zu entwickeln, mit der Wetterdaten verwaltet und analysiert werden können.
Als Grundlage dienen dem Kurs Daten von Wetterstationen aus ganz Deutschland, die jeweils einen eindeutigen Stationsnamen und eine Stadt besitzen. Je nach Ausstattung kann eine Wetterstation unterschiedliche Messwertarten erfassen (z. B. die Temperatur in °C oder die Windgeschwindigkeit in km/h). Zu jeder Messung werden Messwertart, Messwert und Zeitpunkt abgespeichert (vgl. Abbildung 1).
Das folgende Implementationsdiagramm zeigt einen ersten Modellierungsentwurf zur Verwaltung der Wetterdaten. Die Klassendokumentationen stehen im Anhang.
Anhang: Dokumentationen der verwendeten Klassen
Die Klasse Wetterdatenverwaltung
Objekte der Klasse Wetterdatenverwaltung verwalten Wetterstationen mit ihren Messungen.
Auszug aus der Dokumentation der Klasse Wetterdatenverwaltung
Wetterdatenverwaltung()
Ein Objekt der Klasse Wetterdatenverwaltung wird initialisiert.
List<Wetterstation> gibWetterstationen()
Eine Liste mit allen Wetterstationen wird zurückgeliefert.
Wetterstation gibWetterstation(String pStationsname)
Die Wetterstation mit dem Namen pStationsname wird zurückgeliefert. Wenn zu diesem Namen keine Wetterstation existiert, dann wird null zurückgeliefert.
void fuegeHinzu(Wetterstation pWetterstation)
Die Wetterstation pWetterstation wird der Wetterdatenverwaltung hinzugefügt, wenn der Stationsname bisher noch nicht existiert. Sonst geschieht nichts.
void fuegeHinzu(Wetterstation pWetterstation, Messung pMessung)
Wenn die Wetterstation pWetterstation in der Wetterdatenverwaltung existiert, dann wird dieser Station die Messung pMessung hinzugefügt. Sonst geschieht nichts.
Double ermittleEtwas(String pMesswertart, int pJahr)
Diese Methode soll in Teilaufgabe b) analysiert werden.
Die Klasse Wetterstation
Objekte der Klasse Wetterstation verwalten ihren Stationsnamen, ihre Stadt und ihre Messungen.
Auszug aus der Dokumentation der Klasse Wetterstation
Wetterstation(String pStationsname, String pStadt)
Ein Objekt der Klasse Wetterstation wird mit dem Stationsnamen pStationsname und der Stadt pStadt initialisiert.
String gibStationsname()
Der Stationsname wird zurückgeliefert.
String gibStadt()
Die Stadt wird zurückgeliefert.
List<Messung> gibMessungen()
Eine Liste mit allen Messungen dieser Wetterstation wird zurückgeliefert.
void fuegeHinzu(Messung pMessung)
Die Messung pMessung wird hinzugefügt.
List<Messung> ermittleSortierteMessungen(String pMesswertart)
Diese Methode soll in Teilaufgabe c) hinzugefügt werden.
Die Klasse Messung
Objekte der Klasse Messung verwalten ihre Messwertart, ihren Messwert und ihren Zeitpunkt.
Auszug aus der Dokumentation der Klasse Messung
Messung(String pMesswertart, double pMesswert, int pJahr, int pMonat, int pTag, int pStunde, int pMinute)
Ein Objekt der Klasse Messung wird mit der Messwertart pMesswertart, dem Messwert pMesswert und dem Zeitpunkt der Messung initialisiert.
String gibMesswertart()
Die Messwertart wird zurückgeliefert.
double gibMesswert()
Der Messwert wird zurückgeliefert.
int gibJahr()
Das Jahr wird zurückgeliefert.
int gibMonat()
Der Monat wird zurückgeliefert.
int gibTag()
Der Tag wird zurückgeliefert.
int gibStunde()
Die Stunde wird zurückgeliefert.
int gibMinute()
Die Minute wird zurückgeliefert.
Die generische Klasse List
Objekte der generischen Klasse List verwalten beliebig viele, linear angeordnete Objekte vom Typ ContentType. Auf höchstens ein Listenobjekt, aktuelles Objekt genannt, kann jeweils zugegriffen werden. Wenn eine Liste leer ist, vollständig durchlaufen wurde oder das aktuelle Objekt am Ende der Liste gelöscht wurde, gibt es kein aktuelles Objekt. Das erste oder das letzte Objekt einer Liste kann durch einen Auftrag zum aktuellen Objekt gemacht werden. Außerdem kann das dem aktuellen Objekt folgende Listenobjekt zum neuen aktuellen Objekt werden.
Das aktuelle Objekt kann gelesen, verändert oder gelöscht werden. Außerdem kann vor dem aktuellen Objekt ein Listenobjekt eingefügt werden.
Dokumentation der Klasse List<ContentType>
List()
Eine leere Liste wird erzeugt.
boolean isEmpty()
Die Anfrage liefert den Wert true, wenn die Liste keine Objekte enthält, sonst liefert sie den Wert false.
boolean hasAccess()
Die Anfrage liefert den Wert true, wenn es ein aktuelles Objekt gibt, sonst liefert sie den Wert false.
void next()
Falls die Liste nicht leer ist, es ein aktuelles Objekt gibt und dieses nicht das letzte Objekt der Liste ist, wird das dem aktuellen Objekt in der Liste folgende Objekt zum aktuellen Objekt, andernfalls gibt es nach Ausführung des Auftrags kein aktuelles Objekt, d. h., hasAccess() liefert den Wert false.
void toFirst()
Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.
void toLast()
Falls die Liste nicht leer ist, wird das letzte Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.
ContentType getContent()
Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt zurückgegeben. Andernfalls (hasAccess() == false) gibt die Anfrage den Wert null zurück.
void setContent(ContentType pContent)
Falls es ein aktuelles Objekt gibt (hasAccess() == true) und pContent ungleich null ist, wird das aktuelle Objekt durch pContent ersetzt. Sonst bleibt die Liste unverändert.
void append(ContentType pContent)
Ein neues Objekt pContent wird am Ende der Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Wenn die Liste leer ist, wird das Objekt pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false). Falls pContent gleich null ist, bleibt die Liste unverändert.
void insert(ContentType pContent)
Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird ein neues Objekt pContent vor dem aktuellen Objekt in die Liste eingefügt. Das aktuelle Objekt bleibt unverändert. Falls die Liste leer ist und es somit kein aktuelles Objekt gibt (hasAccess() == false), wird pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt. Falls es kein aktuelles Objekt gibt (hasAccess() == false) und die Liste nicht leer ist oder pContent == null ist, bleibt die Liste unverändert.
void concat(List<ContentType> pList)
Die Liste pList wird an die Liste angehängt. Anschließend wird pList eine leere Liste. Das aktuelle Objekt bleibt unverändert. Falls es sich bei der Liste und pList um dasselbe Objekt handelt, pList == null oder eine leere Liste ist, bleibt die Liste unverändert.
void remove()
Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt gelöscht und das Objekt hinter dem gelöschten Objekt wird zum aktuellen Objekt. Wird das Objekt, das am Ende der Liste steht, gelöscht, gibt es kein aktuelles Objekt mehr (hasAccess() == false). Wenn die Liste leer ist oder es kein aktuelles Objekt gibt (hasAccess() == false), bleibt die Liste unverändert.
a)
Beschreiben Sie, in welchen Beziehungen die Klassen der in Abbildung 2 dargestellten Teilmodellierung zueinander stehen.
Begründen Sie im Sachkontext, weshalb es zweckmäßig ist, die Sammlungen der Wetterstationen und der Messungen jeweils als lineare Liste statt als Feld (Array) umzusetzen.
[5 Punkte]
d)
Der Test des ersten Software-Prototyps zeigt, dass das Projekt ausgebaut werden muss, damit es wirklich aussagekräftige Ergebnisse liefert. Zusätzlich sollen die folgenden Anforderungen realisiert werden:
Der Zeitpunkt einer Messung soll so präzisiert werden, dass in Zukunft zusätzlich zum Jahr, zum Monat, zum Tag, zur Stunde und zur Minute auch noch die Sekunde erfasst werden soll. Der so beschriebene Zeitpunkt soll in eine eigene Klasse ausgelagert werden, welche auch jeweils die Abfrage der genannten Attribute einzeln ermöglichen soll.
Um möglichst schnell zu jeder Messung die zugehörige Wetterstation ermitteln zu können, soll eine Messung auch Kenntnis über ihre Wetterstation haben. Eine Messung soll ihre Wetterstation auch zurückliefern können.
Der Projektkurs möchte in Zukunft auch mobile Messungen durchführen können, z. B. mit Wetterballons oder Treibbojen. Eine mobile Messung soll weiterhin einer Wetterstation zugeordnet sein. Zusätzlich soll nur für jede mobile Messung ihre Position in Form von zwei Werten gespeichert werden (z. B. 51.955013, 7.611646). Beide Werte sollen auch abgerufen werden können.
Modellieren Sie die oben aufgeführten Anforderungen als Erweiterung des Implementationsdiagramms aus Abbildung 2.
Erläutern Sie, auf welche Weise Sie die zweite und die dritte Anforderung in Ihrem Implementationsdiagramm umsetzen.
[13 Punkte]
Hinweis: Klassen, Methoden und Attribute des Implementationsdiagramms aus Abbildung 2, die unverändert bleiben, brauchen nicht dargestellt oder angegeben zu werden.
e)
Ein Schüler regt an, die Klassen Wetterstation und Messung durch eine neue Klasse Wetteraufzeichnung zu ersetzen. Nachfolgend sind Beispieldaten für Wetteraufzeichnungen abgebildet:
Stationsname
Stadt
Messwertart
Messwert
Zeitpunkt
Botanischer Garten · Berlin · Temperatur · 17.0 · 2020-08-04 09:01
Botanischer Garten · Berlin · Temperatur · 18.4 · 2020-08-04 10:02
Botanischer Garten · Berlin · Temperatur · 20.6 · 2020-08-04 12:07
Leuchtturm · Kiel · Windgeschwindigkeit · 2.0 · 2019-08-03 10:02
Leuchtturm · Kiel · Windgeschwindigkeit · 20.0 · 2019-12-31 12:07
Zugspitze · Garmisch-Partenkirchen · Temperatur · -10.3 · 2019-12-31 09:01
Zugspitze · Garmisch-Partenkirchen · Windgeschwindigkeit · 20.0 · 2019-12-31 09:01
Zugspitze · Garmisch-Partenkirchen · Temperatur · 4.0 · 2020-08-04 13:01
Zugspitze · Garmisch-Partenkirchen · Windgeschwindigkeit · 32.0 · 2020-08-04 13:01
Teststation · Soest
Abbildung 3: Beispieldaten für Wetteraufzeichnungen
Die Klasse Wetterdatenverwaltung würde in diesem Fall eine Liste mit Objekten der Klasse Wetteraufzeichnung verwalten.
Der Schüler meint, dass sich aus dieser einen Liste von Wetteraufzeichnungen ohnehin alle Informationen entnehmen ließen, dass sein Vorschlag leichter zu implementieren sei und dass er darüber hinaus keine nennenswerten Nachteile habe.
Beurteilen Sie die Aussage des Schülers.
[7 Punkte]

Lösung
Nach den offiziellen Korrekturhinweisen
a) Beschreiben Sie, in welchen Beziehungen die Klassen der in Abbildung 2 dargestellten Teilmodellierung zueinander stehen. Begründen Sie im Sachkontext, weshalb es zweckmäßig ist, die Sammlungen der Wetterstationen und der Messungen jeweils als lineare Liste statt als Feld (Array) umzusetzen.
Lösung: Ein Objekt der Klasse Wetterdatenverwaltung verwaltet im Attribut wetterstationen seine Wetterstationen in einer linearen Liste mit Objekten der Klasse Wetterstation. Jedes Objekt der Klasse Wetterstation verwaltet seine Messungen jeweils in einer weiteren linearen Liste, welche Objekte vom Typ Messung enthält. Das Objekt dieser Liste wird als messungen bezeichnet. Da es möglich ist, dass zur Laufzeit weitere Wetterstationen und Messungen hinzugefügt werden können, ist es sinnvoll, eine dynamische Datenstruktur zu verwenden. Die lineare Liste erfüllt dieses Kriterium, wohingegen das Feld eine statische Datenstruktur ist.
d) Modellieren Sie die oben aufgeführten Anforderungen als Erweiterung des Implementationsdiagramms aus Abbildung 2.
Lösung: Erweiterung des Implementationsdiagramms: - Neue Klasse `Zeitstempel` mit den ganzzahligen Attributen jahr, monat, tag, stunde, minute, sekunde, dem Konstruktor und entsprechenden Getter-Methoden. - Klasse `Messung` erhält eine gerichtete Assoziation auf `Zeitstempel` (`-zeitstempel`) sowie eine gerichtete Assoziation auf `Wetterstation` (`-station`), die entsprechenden Parameter im Konstruktor und Getter-Methoden (`+gibZeitstempel()`, `+gibWetterstation()`). - Neue Klasse `MobileMessung` erbt von `Messung` (Generalisierung/Spezialisierung) und ergänzt die Attribute `breitengrad: double` und `laengengrad: double`, den Konstruktor und die Methoden `+gibBreitengrad(): double` und `+gibLaengengrad(): double`.
d) Erläutern Sie, auf welche Weise Sie die zweite und die dritte Anforderung in Ihrem Implementationsdiagramm umsetzen.
Lösung: Realisierung der zweiten Anforderung: Ein Objekt der Klasse Messung verwaltet eine Referenz auf ein Objekt der Klasse Wetterstation, welche nun zusätzlich im Konstruktor übergeben wird. Die Wetterstation für eine Messung kann über die Methode gibWetterstation abgefragt werden. Realisierung der dritten Anforderung: Da bei einer mobilen Messung zusätzlich zwei Werte für die Position gespeichert werden sollen, erbt die Klasse MobileMessung alle Attribute und Methoden der Klasse Messung und erweitert diese um die zwei Attribute breitengrad und laengengrad jeweils vom Typ double. Die beiden Werte für die Position werden im Konstruktor der Klasse MobileMessung als Parameter übergeben und können über die zwei Getter-Methoden abgerufen werden.
e) Beurteilen Sie die Aussage des Schülers.
Lösung: Durch eine vollständige Verschmelzung der Klassen Wetterstation und Messung zur neuen Klasse Wetteraufzeichnung könnten alle Informationen weiterhin ausgelesen werden. Der Alternativvorschlag des Schülers ist nicht wesentlich einfacher zu implementieren, weil grundsätzlich die gleichen Attribute, Datentypen und Datenstrukturen verwendet werden. Im Ursprungsmodell werden für jede Wetterstation nur die eigenen Messungen verwaltet, d. h. man könnte direkt auf diese Liste der Messungen zugreifen. Um im vom Schüler vorgeschlagenen Alternativmodell die Messungen einer bestimmten Station zu ermitteln, muss zwangsläufig die gesamte Liste aller Wetteraufzeichnungen durchlaufen werden, was deutlich aufwändiger ist und einen nennenswerten Nachteil darstellt. Zudem entsteht Datenredundanz (Name und Stadt der Station werden für jede Messung wiederholt gespeichert) und Stationen ohne Messungen (wie die Teststation Soest) können nicht sauber als Messung repräsentiert werden. Der Vorschlag des Schülers ist grundsätzlich umsetzbar, aber dennoch abzulehnen.
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 2 - Objektorientierte Modellierung mit Im… · GK · Nachtermin 2021 · Aufgabe 2 - Objektorientierte Modellierung · LK · Haupttermin 2021 ›
Mehr Aufgaben zu Objektorientierte Modellierung mit Implementationsdiagrammen
- Aufgabe 2 - Objektorientierte Modellierung mit Im… · GK · Haupttermin 2021
- Aufgabe 1 - Objektorientierte Modellierung · GK · Haupttermin · Weiterbildungskolleg 2021
- Aufgabe 2 - Objektorientierte Modellierung · GK · Haupttermin · Weiterbildungskolleg 2021
- Aufgabe 1 - Objektorientierte Modellierung mit Im… · GK · Nachtermin 2021
- Aufgabe 2 - Objektorientierte Modellierung mit Im… · GK · Nachtermin 2021
- Aufgabe 2 - Objektorientierte Modellierung · LK · Haupttermin 2021
- Aufgabe 1 - Objektorientierte Modellierung mit Im… · LK · Nachtermin 2021
- Aufgabe 2 - Objektorientierte Modellierung mit Im… · LK · Nachtermin 2021