MATRIKELNUMMER:__________________ NAME: ________________________________________________ PUNKTE INSGESAMT: ______ NOTE: ____
1. Regularien
Teilnehmer an der Klausur müssen sich durch Lichtbildausweis identifizieren.
Es dürfen nur leere Blätter, Schreibgeräte und Taschenrechner benutzt werden. Alle Blätter müssen mit Name und Matr.Nummer
gekennzeichnet sein. Blätter ohne Kennzeichen werden nicht berücksichtigt.
Die Klausurzeit für PROGR2 beträgt 90 Min. Man darf seinen Platz erst
verlassen, wenn der Prüfungsleiter die Klausurarbeit in Empfang genommen hat.
Es gilt folgende Punktetabelle:
>69
55-69
40-54
25-39
<25
Das aktive Abschreiben wie auch das Zulassen von Abschreiben wird als Täuschungsversuch bewertet.
MODELLIERUNG EINER SIMULATION
PKT. MAXIMAL: 41
PKT. ERREICHT: ______
Im folgenden wird eine vereinfachte Variante des Forschungs-Ubootes DELTA
beschrieben (2 Mann Besatzung; Einsatz-Tauchtiefe 365 m). Ihre Aufgabe ist es, für die Schulung mit
diesem UBoot einen kleinen SW-Simulator zu bauen. Dazu sollen sie objektorientierte Konzepte von UML
und der Sprache C++ benutzen.
Aus Sicht des UBoot-Schülers sollen Sie ein Menü zur Verfügung stellen, bei dem man
folgende Eingaben machen kann:
Generell Abbruch oder Eingabe oder Fortsetzung mit bisherigen Eingaben.
Falls Eingabe, dann werden folgende Parameter abgefragt:
/* Zusammenhang zwischen Motor und Richtung: bei Vorwärtsfahrt kann die
Richtung um maximal +/- 45o in Fahrtrichtung geändert werden, ebenso bei
Rückwärtsfahrt. */
Nachdem diese Eingaben gemacht wurden, werden diese vom Uboot ausgeführt. Alle Aktionen
des Ubootes, die seine aktuelle Position und Lage in der Umgeung verändern, werden an die
Umgebung ('environment') weitergegeben. Die jeweiligen Zustände der Umgebung werden
in einer einfachen Anzeige der Umgebung auf einfache Weise sichtbar gemacht.
Die Anzeige repräsentiert eine Aufsicht auf die Umgebung mit gleichmässig unterteilten
Feldern, die entweder nichts anzeigen oder die aktuelle Position des UBootes. Dasjenige Feld, das
die aktuelle Position des Ubootes anzeigt, enthält die aktuelle Richtung des UBoots bezogen
auf seinen Bug (:= Spitze des UBootes) mittels einer Zahl sowie seine aktuelle
Tauchtiefe. Eine Abfrage entspricht der Zeit von 1 sec. 1 Feld in der Anzeige repräsentiert
eine Fläche von 10 x 10 m. Es wird angenommen, dass sich das UBoot mit seiner Länge von 5 m in der
Mitte des Feldes befindet. Bei voller Fahrt kann sich das UBoot von einem Feld in das Nachbarfeld
bewegen; ausserdem kann es in dieser Simulation idealisierend pro 1 sec jeweils 10m auf- oder
abtauchen.
Beispiel 1: angenommen das UBoot befindet sich in einem Feld mit aktueller Richtung
45o und 100m Tiefe. Wenn der Motor auf 'Fahrt vorwärts' steht und die Fahrtrichtung mit
90o angegeben wird, dann bewegt sich das UBoot eine Zelle weiter und zwar in diejenige
Zelle, die in Richtung 90o liegt (siehe Bild).
Beispiel 2: angenommen das UBoot befindet sich in einem Feld mit aktueller Richtung
0o und 100m Tiefe. Wenn der Motor auf 'Fahrt rückwärts' steht und die Fahrtrichtung mit
225o angegeben wird, dann bewegt sich das UBoot eine Zelle weiter und zwar in diejenige
Zelle, die in Richtung 225o liegt (siehe Bild). Die anschliessende Richtung des UBoots
orientiert sich nach dem Bug, und dieser zeigt nach der Rückwärtsfahrt in die Richtung
45o!
Beispiel: Vorwärts
90o und Rückwärtsfahrt 225o
Teilaufgabe - MAX.PKT: 2
Zeichnen Sie einen Usecase aus Sicht des UBoot-Schülers
Teilaufgabe- MAX.PKT: 6
Zeichnen Sie UML-Klassendiagramme für die Klassen 'UBoot', 'Umwelt' und
'Anzeige'.
Teilaufgabe - MAX.PKT: 6
Zeichnen Sie ein UML-Sequenzendiagramm für die Interaktion zwischen den
Objekten vom Typ 'UBoot', 'Umwelt' und 'Anzeige' sowie dem Benutzer
Teilaufgabe - MAX.PKT: 9
Übersetzen Sie die UML-Klassen in C++-Klassen
Teilaufgabe - MAX.PKT: 12
Geben Sie eine mögliche C++-Implementierung für die Klassen 'UBoot', 'Umwelt'
und 'Anzeige' an.
Teilaufgabe - MAX.PKT: 6
Geben Sie in C++ eine mögliche Usage-Datei an, die die
Benutzerschnittstelle beinhaltet.
Konstruktoren
PKT. MAXIMAL: 6
PKT. ERREICHT: ______
Im Kontext des zuvor geschilderten UBoot-Simulators besteht grundsätzlich
die Möglichkeit, auch mehr als ein UBoot in die Simulation einzuführen. Geben Sie eine explizite
Definition eines Copy-Konstruktors und eines Copy-Assignment-Operators in der Klassendefinition der
Klasse UBoot an, geben Sie zusätzlich die Implementierung an und zeigen Sie, wie Sie mittels
Copy-Konstruktor und Copy-Assigment-Konstruktor von schon eingeführten UBoot-Objekten Kopien im
Rahmen der Usage-Datei erstellen können.
Vererbung
PKT. MAXIMAL: 13
PKT. ERREICHT: ______
Im Simulator soll mehr als ein UBoot zugelassen werden. Dazu soll ein
Koordinatensystem eingeführt (siehe Bild).
Koordinatensystem für Umgebung2
mit offenen Rändern
Konstruieren Sie die Klasse 'Umgebung2' als abgeleitete Klasse von der Klasse 'Umgebung'. Gestalten Sie das Interface der neuen
Klasse 'Umgebung2' so, dass folgende Leistungen abgerufen werden können:
Bei Einführung eines neuen UBootes kann für dieses neue UBoot eine
Startposition gewählt werden.
Eingeführte UBoote können ihre Positionen verändern.
Die Klasse 'Anzeige' kann alle notwendigen Informationen zur Anzeige aller
UBoote anfordern.
Ferner soll gelten, dass die Klasse 'Umgebung2' Kollisionen zwischen UBooten identifiziert und
diese dann sinken lässt.
Teilaufgabe - MAX.PKT: 4
Geben sie ein UML-Diagramm für die Vererbung der neuen Klasse
'Umgebung2' von der Klasse 'Umgebung an; schreiben Sie die C++Klassendefinition für die neue Klasse
'Umgebung2' auf.
Teilaufgabe - MAX.PKT: 6
Schreiben Sie die Implementierung für die neue Klasse 'Umgebung2' auf.
Teilaufgabe - MAX.PKT: 3
Zeigen sie, wie man Objekte und Elementfunktionen der neuen Klasse 'Umgebung2'
in der Usage-Datei nutzen kann.
Friend-Funktion/ Gloable Funktion
PKT. MAXIMAL: 6
PKT. ERREICHT: ______
Wenn sie im Simulator ein Koordinatensystem implementiert haben, dann
können Sie auch die Abstände zwischen UBooten ermitteln. Die Formel für den Abstand zwischen
zwei Punkten a = (ax,ay,az) und b =
(bx,by,bz ) im 3-dimensionalen euklidischen Raum lautet:
Teilaufgabe - MAX.PKT: 3
Realisieren Sie die Abstandfunktion als eine friend-Funktion und
zeigen Sie, wie man sie anwendet.
Teilaufgabe - MAX.PKT: 3
Realisieren Sie die Abstandfunktion als eine globale Funktion und
zeigen Sie, wie man sie anwendet.
Ein-Ausgabe mit Dateien
PKT. MAXIMAL: 16
PKT. ERREICHT: ______
Damit der UBoot-Schüler sein Lernverhalten besser auswerten kann, soll
während jedes Simulationslaufes eine Log-Datei geschrieben werden. Auf Wunsch kann diese dann
anschliessend gelesen werden.
Teilaufgabe - MAX.PKT: 8
Schreiben Sie eine Funktion, die eine neue Datei zum Schreiben öffnet.
Bauen Sie in diese Funktion eine Fehlerbehandlung für den Fall ein, dass bei diesem Vorgang
Fehler auftreten. Bauen Sie diese Funktion so in in das UBoot-Beispiel ein, dass man die Funktion
zum Schreiben einer Log-Datei nutzen kann.
Teilaufgabe - MAX.PKT: 8
Schreiben Sie eine Funktion, die eine bestehende Datei zum Lesen öffnet.
Bauen Sie in diese Funktion eine Fehlerbehandlung für den Fall ein, dass bei diesem Vorgang
Fehler auftreten. Bauen Sie diese Funktion so in in das UBoot-Beispiel ein, dass man die Funktion
zum Lesen einer Log-Datei nutzen kann.
Die Sprache C++ bietet einen eigenen Mechanismus für die
Ausnahmebehandlung ('exception handling').
Teilaufgabe - MAX.PKT: 6
Geben Sie anhand einer Programmskizze die drei Schlüsselwörter an, die für die
Ausnahmebehandlung wichtig sind und erläutern Sie kurz, wie diese drei
Elemente zusammenwirken können, um eine Ausnahmebehandlung zu realisieren.
Teilaufgabe - MAX.PKT: 6
Erläutern Sie anhand einer Programmskizze, wie Sie in C++ ihre
eigene Ausnahmebehandlung realisieren könnten, die immer dann aktiviert wird, wenn eine
Ausnahme auftritt.
Templates
PKT. MAXIMAL: 18
PKT. ERREICHT: ______
In C++ gibt es die Möglichkeit, parametrisierte Klassen (:= Templates) zu
definieren.
Teilaufgabe - MAX.PKT: 3
Geben Sie eine Klassendefinition für eine Klasse Stack ('Stapel')
für Objekte vom Typ 'int' an; der Stack soll über die Elementfunktionen 'push()' und 'pop()'
verfügen. Benutzen Sie für die Definition Elemente aus der C++-Standard-Bibliothek STL.
Teilaufgabe - MAX.PKT: 4
Geben sie die Implementierung für die Klasse 'Stack' an.
Teilaufgabe - MAX.PKT: 3
Schreiben Sie die Definition für die Klasse 'Stack' als eine
Definition für ein Template.
Teilaufgabe - MAX.PKT: 4
Geben Sie die Implementierung für die parametrisierteKlasse 'Stack' an.
Teilaufgabe - MAX.PKT: 4
Geben sie eine Usage-Datei an, in der Sie ein Objekt von der Klasse
Stack vom Typ 'int' einführen, dazu eine Kopie des Objektes, sowie ein Objekt des Templates
Stack mit einer Kopie sowie einigen push()- und pop()-Operationen mit diesen Objekten.