Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober 2001 Stefan Holland Informatik II Hinweise: Klausur II Verwenden Sie für Ihre Lösungen ausschließlich den Platz unterhalb der jeweiligen Aufgabe. Bei den Multiple Choice-Aufgaben genügt es, die richtigen Antworten anzukreuzen. Die Klausur besteht aus fünf Aufgaben: 1. Multiple Choice 2. Vererbung (konzeptionelle Aufgabe, Programmieraufgabe) 3. Implementierung einer sortierten Liste (Programmieraufgabe) 4. Implementierung eines Applets (Programmieraufgabe) 5. Synchronisation mit Threads (Programmieraufgabe) Die Bearbeitungszeit beträgt 120 Minuten. Füllen Sie folgende Felder leserlich aus: Name Vorname Matrikelnummer Punkte: Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5 P Note
Aufgabe 1 (5 Punkte): Multiple Choice Kreuzen Sie für jede Aussage Richtig oder Falsch an. Pro Teilaufgabe gibt es dabei einen halben Punkt. (a) Wenn ein Thread seine run()-methode abgearbeitet hat, kann auf dem zugehörigen Thread-Objekt keine Methode mehr aufgerufen werden. (b) Abstrakte Methoden sind automatisch immer final. (c) Im Abstract Window Toolkit (AWT) besitzt eine Komponente der graphischen Benutzeroberfläche auf jeder Plattform dasselbe Erscheinungsbild. (d) In Java kann es passieren, dass zwei verschiedene Threads gleichzeitig den Code einer synchronisierten Methode ausführen. (e) Auf einem Objekt O kann eine Methode ausgeführt werden, obwohl der Konstruktor von O noch nicht zu Ende ausgeführt ist. (f) Die Container-Klasse im AWT ist von der Klasse Component abgeleitet. (g) Methoden einer Klasse K mit dem Modifikator protected sind nur in Unterklassen von K und innerhalb der Klasse K verfügbar. (h) In UML modellierte Mehrfachvererbung kann nicht direkt in Java umgesetzt werden. (i) Von einer Schnittstelle können nur abstrakte Objekte erzeugt werden. (j) Ein Applet kann nur die Methoden haben, die von der Klasse java.awt.applet geerbt sind.
Aufgabe 2 (9 Punkte): Vererbung Gegeben sind die Begriffe Körper, Pyramide, Rechteck, Fläche, Kugel, Polygon (Vieleck), Würfel, Kreis, Quader, Punkt und Ellipse. Jeder dieser Begriffe wird dabei durch eine Klasse modelliert. (a) Erstellen Sie einen Graphen, der die ist-ein Beziehung zwischen den obigen Begriffen wiedergibt. In diesem geht eine Kante von A nach B, falls gilt: B ist ein A. (b) Betrachten Sie folgenden Ausschnitt aus einer Java-Implementierung: class Ellipse... protected float radius1, radius2; protected Punkt mittelpunkt; public Ellipse (Punkt p, float r1, float r2) radius1 = r1; radius2 = r2; mittelpunkt = p; public void zeichne()... class Kreis extends Ellipse public Kreis (Punkt p, float r1, float r2) super(p,r1,r2); Erklären Sie kurz, welches Problem hier auftreten kann. Hinweis: p r r2 r1 p Kreis Ellipse (c) Skizzieren Sie analog zu obigem Programmfragment eine Implementierung von Kreis und Ellipse, bei der der Kreis die Ober- und Ellipse die Unterklasse bildet.
Aufgabe 3 (9 Punkte): Sortierte Liste Es soll eine Klasse SortedList von Elementen des Typs ListNode (bzw. einer Unterklasse) implementiert werden. Gehen Sie dazu folgendermaßen vor: (a) Programmieren Sie zunächst die abstrakte Klasse ListNode inklusiv der Methode lessthan(...). (b) Implementieren Sie die Klasse SortedList einschließlich Konstruktor(en) und die Methoden insert(...), delete(...) und print(...). (c) Leiten Sie von ListNode zwei Unterklassen für die Verwaltung von ganzen Zahlen und Zeichenketten ab. (d) Schreiben Sie zu ListNode eine main()-methode, in der Sie die Methoden der Klasse ListSort mit Elementen der Unterklasse für Zahlen austesten.
Aufgabe 4 (10 Punkte): Applet Es soll ein Applet programmiert werden, daß ein Balkendiagramm zeichnet. Das Balkendiagramm soll die Anzahl der Ausprägungen von Farben wiedergeben, wobei die Höhe (=Anzahl Pixel) eines Balkens die Anzahl des Auftretens der jeweiligen Farbe angibt. Farbe Anzahl gelb 120 rot 80 blau 140 grün 30 Dabei soll jeder Balken in der Farbe dargestellt werden, die er repräsentiert und auf einer Achse/Linie liegen. Wenn der Mauszeiger bei einem Mausklick über einem Balken liegt, soll die Anzahl der Farben in diesem Balken in einem Textfeld ausgegeben werden. Das Applet sollte etwa folgendermaßen aussehen: Hinweise HTML-Code für das Applet ist nicht nötig. Denken Sie daran, dass der Ursprung einer graphischen Komponente (z.b. Balken) links oben ist.
Aufgabe 5 (13 Punkte): Synchronisieren von Threads Bei der Einsichtnahme für die Klausur Informatik II im Kaffeeraum dürfen maximal fünf Studierende gleichzeitig Einsicht nehmen. Zwischendurch soll der Kaffeeraum gereinigt werden. Das Reinigungspersonal darf den Raum aber erst betreten, wenn keine Studierenden mehr im Raum sind. Umgekehrt gilt, dass der Raum während der Reinigungsarbeit nicht benutzt werden darf. Das Reinigungspersonal soll bevorrechtigt sein, d.h. wenn das Reinigungspersonal wartet, dürfen keine Studenten den Kaffeeraum betreten. Schreiben Sie dazu eine Klasse Kaffeeraum, die die Methoden beginneinsicht, endeeinsicht, beginnreinigung und endereinigung implementiert. Verwenden Sie geeignete Java-Synchronisationsmechanismen, um obige Bedingungen zu erfüllen. Die folgende Klasse stellt ein Testprogramm für die Klasse Kaffeeraum dar. public class Putztrupp extends Thread private Kaffeeraum kaffeeraum; public Putztrupp(Kaffeeraum raum) kaffeeraum = raum; public void run() try while(true) sleep(20000); // Putze woanders System.out.println("Putztrupp moechte in Kaffeeraum"); kaffeeraum.beginnreinigung(); System.out.println("Putztrupp betritt Kaffeeraum"); sleep(3000); // Putze Kaffeeraum kaffeeraum.endereinigung(); System.out.println("Putztrupp verläßt Kaffeeraum"); catch (InterruptedException x) public static void main(string [] args) Kaffeeraum raum = new Kaffeeraum(); StudentenGenerator studenten = new StudentenGenerator(raum); Putztrupp putztrupp = new Putztrupp(raum); studenten.start(); putztrupp.start(); Die main()-methode könnte prinzipiell natürlich auch in einer eigenen Klasse sein. Implementieren Sie die Klassen StudentenGenerator und Student, wobei der StudentenGenerator eine unendliche Menge von Studenten mit zufälligem Zeitabstand erzeugt. Die Klasse Student soll analog zur Klasse Putztrupp so definiert sein, dass er seine Klausur durchsieht und danach wieder geht.