Beruflich Dokumente
Kultur Dokumente
2021
Die Klausur "Programmierung" besteht aus 7 Aufgaben. Zu jeder Aufgabe müssen Sie eine oder
mehrere Dateien bearbeiten und zur Abgabe hochladen. Sie können die Aufgaben in beliebiger
Reihenfolge bearbeiten. Sie können zu jeder Aufgabe mehrfach Lösungen einreichen. Es wird
ausschließlich die letzte eingereichte Lösung jeder Aufgabe betrachtet und bewertet!
Die Klausurzeit beträgt 120 Minuten Bearbeitungszeit plus insgesamt 10 Minuten Vor- und
Nachbereitungszeit wegen der Durchführung über elektronische Systeme. Erlaubte Hilfsmittel sind
ausschließlich die Unterlagen der Lehrveranstaltung sowie (Software-)Werkzeuge zur Bearbeitung
der Lösungsdateien.
Alle benötigten Dateivorlagen finden Sie im zip-Archiv. Ein erneuter Download in den einzelnen
Aufgaben ist nicht notwendig.
Nachdem die ersten vier Knoten in den Baum eingefügt wurden sieht der Baum wie folgt aus:
a) Erstellen Sie sich eine Skizze, in der Sie die weiteren Knoten einfügen. Geben Sie alle Knoten
mit Höhe 2 von links nach rechts an. Geben Sie die Antwort in dem Kommentarfeld der
Klasse Tree.java ein. (8 Punkte)
b) Implementieren Sie die Methode countSpecificNodes(Node node, String
bezeichnung) in der Klasse Tree , so dass sie alle Knoten des Baums zählt, welche den
String bezeichnung im entsprechenden Attribut der Klasse Gemuese enthalten.
Rückgabe der Methode ist die entsprechende Knotenanzahl. (6 Punkte)
Die präsentierte Listenstruktur beinhaltet zwei Fehler, so dass es im Umgang mit der Liste zu
Exceptions, oder fehlerhaftem Verhalten kommt.
a) Schreiben Sie eine toString()-Methode für die Klasse Bank, so dass alle Attribute der Klasse
Bank als String zurückgegeben werden. Das Attribut, welches zum Vergleich mittels der
compare()-Methode genutzt wird, muss als Erstes ausgegeben werden. (2 Punkte)
b) Implementieren Sie die printValues()-Methode in der Klasse List, so dass alle Elemente
der Liste kommagetrennt in einer Zeile ausgegeben werden. Zur Ausgabe der Elemente als
String verwenden Sie die toString()-Methode der Klasse Bank. Geben Sie abschließend eine
Leerzeile aus. (3 Punkte)
c) Implementieren Sie in der Klasse Test die Methode fillList(), welche als Parameter die zu
befüllende Liste übergeben bekommt. Die Methode soll die Liste leeren und anschließend
mit Testwerten befüllen. Verwenden Sie für Strings Buchstaben Ihres Namens und bei Zahlen
die ersten Ziffern Ihrer Matrikelnummer. Füllen Sie die Liste mit fünf Einträgen. (5 Punkte)
Beispiel: Max Mustermann 10876543
Strings: "M", "a", "x", "M", "u" int: 1,0,8,7,6
d) Im Quellcode der Klasse List sind zwei Fehler enthalten. Sehen Sie sich den Code an und
finden Sie die Fehler. Schreiben Sie zu jedem der Fehler einen Testfall in Test.java, um den
Fehler hervorzuheben. Geben Sie jedem Testfall eine Nummer (T1, T2…). Kommentieren Sie
zu jedem Testfall in eigenen Worten, was Sie mit diesem Testfall überprüfen und was nicht
wie erwartet funktioniert. (6 Punkte)
Hinweis: Falls Sie Schwierigkeiten haben einen Fehler zu finden, können Sie versuchen durch
geeignete Testfälle die Fehler aufzudecken.
e) Beheben Sie die gefundenen Fehler, so dass die Liste wie erwartet funktioniert. Schreiben Sie
an den korrigierten Stellen einen Kommentar mit der zugehörigen Testfallnummer (T1, T2…).
(8 Punkte)
Aufgabe 5 (34 Punkte)
In dieser Aufgabe ist ein Text angegeben, der Teile eines Immobilien-Softwaresystems beschreibt.
Lesen Sie den Text und erstellen Sie objektorientierten Java-Code, der die im Text genannten
Eigenschaften des Softwaresystems umsetzt. Sie können in dieser Aufgabe beliebige Importe
verwenden. Erstellen Sie getter und setter Methoden nur wenn Sie diese auch verwenden.
Beide Immobilienarten haben die Gemeinsamkeit, dass sie einen Grundpreis in ganzen Euro besitzen.
Der Grundpreis wird bereits bei der Erstellung einer Immobilie mit einem Wert belegt. Es kann keine
Objekte vom Typ Immobilie geben, sondern nur von den daraus abgeleiteten Typen Lagerhaus und
Fabrik.
Eine Fabrik und ein Lagerhaus haben neben dem Grundpreis eine weitere gemeinsame Eigenschaft
den Besitztyp. Der Besitztyp kann nur folgende Werte annehmen: PRIVAT, STAATLICH. Genau wie der
Grundpreis wird auch der Besitztyp bei der Objekterzeugung festgelegt.
Mittels einer Schnittstelle Verkaufbar, welche durch jede Immobilie implementiert wird, gibt es eine
Methode, die den Kaufpreis einer Immobilie zurückgibt. Im Interface ist die Konstante Faktor
enthalten, welche mit der Ganzzahl 2 initialisiert wird. Eine private Immobilie kostet den Grundpreis
multipliziert mit dem Faktor des Interfaces, eine Staatliche nur den Grundpreis.
Eine Fabrik enthält eine Liste von weiteren Fabriken. Es gibt eine Methode in Fabrik, die eine neue
Liste der weiteren Fabriken mit Besitztyp Privat zurückgibt. In dieser Methode wird zudem geprüft,
ob die Liste der weiteren Fabriken leer ist. Ist dies der Fall, soll eine checked Exception vom Typ
KeineWeiterenFabrikenException geworfen werden. Diese Exception wird an die aufrufende
Methode weitergegeben.
Ein Lagerhaus besitzt eine Fläche, welche bei der Objekterzeug festgelegt wird. Es gibt eine Methode
getFlaeche, welche die Fläche zurückgibt. Sollte jedoch die Fläche einen negativen Wert besitzen,
wird eine unchecked Exception vom Typ FlaecheNegativException geworfen.
Ein Lagerhaus hat eine Liste von weiteren Lagerhäusern. Es gibt eine Methode in der Klasse
Lagerhaus, welche eine neue sortierte Liste von Lagerhäusern zurückgibt. Diese Liste ist sortiert nach
der Fläche der Lagerhäuser, beginnend mit der kleinsten Fläche. Die Sortierung verwendet die
Methode getFlaeche, um die Fläche auszulesen. Da hierbei eine FlaecheNegativException auftreten
kann, soll diese behandelt werden, indem auf der Konsole eine Ausgabe erfolgt, dass ein Lagerhaus
eine Fläche mit negativem Wert besitzt. In diesem Fall wird eine leere Liste zurückgegeben.
Aufgabe 6 (13 Punkte)
Schreiben Sie die Lösung der Aufgabe in die bereitgestellte Lambda.txt
1. Welche Eigenschaft muss ein Interface haben damit es als FunctionalInterface eingesetzt
werde kann? (2 Punkte)
2. Betrachten Sie das Interface MultiplySAM und die Klasse TestMultiplySAM. Geben
Sie den Lambda Ausdruck an, der in der testMultiply() Methode statt dem null stehen
muss, damit der input mit dem faktor multipliziert wird. (3 Punkte)
@FunctionalInterface
public interface MultiplySAM {
int multiplyInputWithFaktor(int input, int faktor);
}
3. Betrachten Sie die frage3Methode. Beschreiben Sie, was die einzelnen verwendeten
Streammethoden in der frage3Methode bewirken. (3 Punkte)
4. Betrachten Sie die Klasse MyValue sowie frage4Methode. Beschreiben Sie, was die
einzelnen unten vorgegebenen Streammethoden in der frage4Methode bewirken. (5 Punkte)
1. Führen Sie einen Tiefendurchlauf mit Besuchsmarkierung auf dem Startknoten 6 aus.
Schreiben Sie die Zahlen der besuchten Knoten in Besuchsreihenfolge auf. Sollten mehrere
Folgeknoten möglich sein, beginnen Sie mit der kleinsten Zahl. (4 Punkte)
2. Was ist der Unterschied zwischen = und ==? Wann werden die jeweiligen Zeichen benutzt?
(2 Punkte)
3. Schreiben sie die Initialisierung eines zweidimensionalen String-Arrays mit Größe0 2 und
Größe1 5. (2 Punkte)
4. Worin besteht der Unterschied zwischen Unchecked- und Checked-Exceptions? (2 Punkte)