Prof. Dr. Volker Gruhn 26. Juli 2004 Klausur Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Hinweise • Bevor Sie mit der Bearbeitung der Aufgaben beginnen, müssen Sie auf allen Blättern Ihren Namen und Ihre Matrikelnummer eintragen. Dafür bekommen Sie zusätzlich fünf Minuten Zeit. • Der Klausurtext enthält ausreichend Platz zur Lösung der Aufgaben. Sie können auch die Rückseiten der Blätter für Ihre Lösungen nutzen. Sofern Sie zusätzliches Papier benötigen, wenden Sie sich an die Aufsicht. Die Nutzung eigenen Papiers ist nicht gestattet. • Sollte Ihre Lösung nicht unmittelbar unter oder neben der Aufgabenstellung stehen, machen Sie bitte einen entsprechenden Hinweis. Streichen Sie diejenigen Teile der von Ihnen geschriebenen Texte deutlich durch, die nicht in die Bewertung eingehen sollen. • Die Klausur ist zusammengeheftet. Die Heftung darf nicht geöffnet werden. • Die Aufsicht gibt Ihnen keine Hilfestellung beim Lösen der Aufgaben. • Teilnehmer, die eine Einzelklausur über ein Teilgebiet schreiben, müssen zum Bestehen mindestens 20 Punkte erreichen. Maximal können 50 Punkte erreicht werden. • Teilnehmer, die die Gesamtklausur über beide Teilgebiete schreiben, müssen zum Bestehen in beiden Teilgebieten jeweils mindestens 20 Punkte erreichen. Maximal können jeweils 50 Punkte erreicht werden. Viel Erfolg! Aufgabe erreichbare Punkte erreichte a) b) c) d) e) f) insg. Punkte 1 1 1 2 2 2 2 3 5 6 3 1 2 3 5 4 3 1 1 5 2 2 Summe 4 2 12 16 1 1 13 5 4 50 Lehrstuhl für Angewandte Telematik / e-Business, Institut für Informatik, Universität Leipzig Klostergasse 3, D-04109 Leipzig • http://www.lpz-ebusiness.de Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Aufgabe 1: Objektorientierte Programmierung a) Erläutern Sie kurz den Unterschied zwischen einer Klasse und einem Objekt. (1 Punkt) b) Erläutern Sie kurz den Unterschied zwischen Aggregation und Komposition im Kontext von objektorientierter Modellierung. (1 Punkt) 26. Juli 2004 Seite 2 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: c) Erläutern Sie kurz den Unterschied zwischen dem Überladen und Überschreiben einer Methode. (2 Punkte) d) Erläutern Sie kurz den Unterschied zwischen abstrakten Klassen und Interfaces. (2 Punkte) 26. Juli 2004 Seite 3 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: e) Gegeben sei die folgende Klasse Zahl: public class Zahl { public int n; } public Zahl(int n) { this.n = n; } Vollziehen Sie die Ausführung des folgenden Java-Programmfragments beim Aufruf von start() nach. Notieren Sie die erzeugten Ausgaben und erläutern Sie kurz die Gründe für eventuelle Unterschiede und Gemeinsamkeiten der ausgegebenen Werte. (4 Punkte) void calc(int n) { ++n; System.out.println("1: " + n); } void calc(Zahl zahl) { zahl.n++; System.out.println("3: " + zahl.n); } void start() { int n = 0; Zahl zahl = new Zahl(0); } calc(n); System.out.println("2: " + n); calc(zahl); System.out.println("4: " + zahl.n); 26. Juli 2004 Seite 4 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: f) Gegeben sei wieder die Klasse Zahl: public class Zahl { public int n; } public Zahl(int n) { this.n = n; } Vollziehen Sie die Ausführung des folgenden Java-Programmfragments beim Aufruf von comp() nach. Notieren Sie die erzeugten Ausgaben und erläutern Sie sie. (2 Punkte) void comp() { Zahl a = new Zahl(1); Zahl b = new Zahl(1); Zahl c = b; if (a == b) System.out.println("a gleich b"); else System.out.println("a ungleich b"); if (b == c) System.out.println("b gleich c"); else System.out.println("b ungleich c"); } 26. Juli 2004 Seite 5 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Aufgabe 2: Bäume a) Geben Sie die formale Definition eines binären Suchbaums an. (2 Punkte) b) Entfernen Sie die Wurzel aus dem folgenden binären Suchbaum und formen Sie ihn so um, dass die Suchbaum-Eigenschaft erhalten bleibt. Zeichnen Sie die Zwischenschritte und das Endergebnis der Umformung auf. (3 Punkte) 5 2 8 1 4 3 26. Juli 2004 6 9 7 Seite 6 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: c) Ergänzen Sie die folgende Implementierung eines Binärbaums um eine Methode zaehleKnoten, die die Anzahl der Knoten im Baum liefert. (5 Punkte) public class Baum { private int wurzelwert; private Baum links; private Baum rechts; public Baum() {...} ... } 26. Juli 2004 Seite 7 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: d) Wir bezeichnen einen Baumknoten, der zwei Unterbäume hat, als 2-Knoten; einen Baumknoten, der drei Unterbäume hat, als 3-Knoten, etc. Ein 2-3-4-Baum ist dann ein Baum, der nur 2-, 3- und 4-Knoten enthalten kann und die Bedingung erfüllt, dass alle Blätter (d.h. alle Knoten ohne Unterbäume) auf der gleichen Ebene liegen. Die Tiefe eines Baums sei als die Zahl der Knoten auf dem längsten Pfad von der Wurzel zu einem Blatt definiert (d.h. der leere Baum hat die Tiefe 0, ein nur aus der Wurzel bestehender Baum die Tiefe 1, usw.). Beweisen Sie, dass ein 2-3-4-Baum der Tiefe t höchstens (4t – 1) / 3 Knoten enthalten kann. (6 Punkte) 26. Juli 2004 Seite 8 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Aufgabe 3: Graphen a) Geben Sie die formale Definition eines gerichteten Graphen an. (1 Punkt) b) Gegeben sei der folgende Graph G: 1 2 3 4 5 6 Ist G schwach zusammenhängend? Ist G stark zusammenhängend? Begründen Sie Ihre Aussagen. (2 Punkte) 26. Juli 2004 Seite 9 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: c) Gegeben sei wieder der Graph G: 1 2 3 4 5 6 Führen Sie einen Breitendurchlauf über G ausgehend von Knoten 1 durch. Geben Sie für jeden Schritt die Nummer des besuchten Knotens und den Inhalt der Queue an. (3 Punkte) Schritt besuchter Knoten Queue 1 2 ... 26. Juli 2004 Seite 10 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: d) Notieren Sie den Java-Coderahmen der Adjazenzlistendarstellung eines gerichteten, attributierten Graphen (nur Klassen- und Attributdeklarationen, keine Methoden). (5 Punkte) 26. Juli 2004 Seite 11 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: e) Geben Sie die formale Definition eines Spannbaums eines zusammenhängenden ungerichteten Graphen an. (1 Punkt) f) Zeichnen Sie einen Spannbaum für den folgenden Graphen. (1 Punkt) 26. Juli 2004 1 2 3 4 5 6 7 8 9 Seite 12 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Aufgabe 4: Interfaces Gegeben seien die folgenden Klassen und Interfaces (Kursivdruck symbolisiere abstrakte Deklaration): InterfaceA methode1() InterfaceB methode1(int i) InterfaceC InterfaceD methode1() methode2() KlasseF methode3() methode4() KlasseE ... a) Notieren Sie den Java-Coderahmen von KlasseE. Ergänzen Sie dabei die Signaturen aller Methoden, die in der Klasse implementiert werden müssen. Nehmen Sie an, dass alle Methoden public sind und den Rückgabetyp void haben. (3 Punkte) 26. Juli 2004 Seite 13 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: b) Erläutern Sie kurz, ob ein Namenskonflikt entstehen würde, wenn methode1 in InterfaceC den Rückgabetyp int hätte. (1 Punkt) c) Erläutern Sie kurz, ob ein Namenskonflikt entstehen würde, wenn InterfaceC von InterfaceA erben würde. (1 Punkt) 26. Juli 2004 Seite 14 von 15 Klausur - Teilgebiet: Programmierung und Programmiersprachen Vor- und Nachname: Mat.-Nr.: Aufgabe 5: Ausnahmebehandlung a) Gegeben sei der folgende Coderahmen der Klasse Stack. Die Methode pop() liefert den Wert des zuoberst auf dem Stack liegenden Elements oder wirft eine EmptyStackException, wenn der Stack leer ist. class Stack { ... void push(int i) {...} // Element ablegen int pop() throws EmptyStackException {...} // Element holen } Ergänzen Sie im folgenden Programmfragment eine Ausnahmebehandlung, die die Endlosschleife beendet und die Meldung „Stack leer“ ausgibt, wenn der Stack leer ist. (2 Punkte) void printStack(Stack stack) { while (true) System.out.println(stack.pop()); } b) Nennen Sie zwei Vorteile der Ausnahmebehandlung mit Exceptions gegenüber der Fehlersignalisierung durch besondere Rückgabewerte (im obigen Szenario z.B. Rückgabe von –1 zur Signalisierung eines leeren Stacks). (2 Punkte) 26. Juli 2004 Seite 15 von 15