SS2001, 2. Klausur - Institut für Informatik

Transcription

SS2001, 2. Klausur - Institut für Informatik
Universität Augsburg, Institut für Informatik
Prof. Dr. Martin Ester
Stefan Holland
Sommersemester 2001
08. Oktober 2001
Informatik II
Klausur II
Hinweise:
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.
Richtig Falsch
(b) Abstrakte Methoden sind automatisch immer final.
Richtig Falsch
(c) Im Abstract Window Toolkit (AWT) besitzt eine Komponente der graphischen Benutzeroberfläche auf jeder
Plattform dasselbe Erscheinungsbild.
Richtig Falsch
(d) In Java kann es passieren, dass zwei verschiedene Threads gleichzeitig den Code einer synchronisierten Methode
ausführen.
Richtig Falsch
(e) Auf einem Objekt O kann eine Methode ausgeführt werden, obwohl der Konstruktor von O noch nicht zu Ende
ausgeführt ist.
Richtig Falsch
(f) Die Container-Klasse im AWT ist von der Klasse Component abgeleitet.
Richtig Falsch
(g) Methoden einer Klasse K mit dem Modifikator protected sind nur in Unterklassen von K und innerhalb der
Klasse K verfügbar.
Richtig Falsch
(h) In UML modellierte Mehrfachvererbung kann nicht direkt in Java umgesetzt werden.
Richtig Falsch
(i) Von einer Schnittstelle können nur abstrakte Objekte erzeugt werden.
Richtig Falsch
(j) Ein Applet kann nur die Methoden haben, die von der Klasse java.awt.Applet geerbt sind.
Richtig Falsch
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
Kreis
r2
r1
p
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
gelb
rot
blau
grün
Anzahl
120
80
140
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.

Documents pareils