Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Mißverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf diese Blätter, gegebenenfalls auf ein numeriertes leeres Blatt mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmierblätter) ab. Für falsche oder nicht einleuchtende Lösungen bekommen Sie grundsätzlich keine Punkte. Wenn aber aus Ihren Notizen oder Bemerkungen ersichtlich ist, daß Ihr Gedankengang richtig war, können Sie Teilpunkte bekommen. Sie verlieren jedoch diese Möglichkeit, wenn Abschreiben oder Kommunikation während der Klausur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt. Bei manchen Aufgaben steht als Orientierungder Anzahl der Programmzeilen in der Musterlösung. In den letzten 15 Minuten werden keine Fragen mehr beantwortet. Die Aufgaben sind ungefähr gleich aufwendig und sind 40 Punkte wert.
Klausurtermin:
Aufgabe 1: Zeichnen Sie die Datenstruktur einer vorwärts verkettenen Liste (alt zeigt auf neu) von Knoten der Klasse Listenelement. Die Liste soll fünf Einträge enthalten. Kennzeichnen Sie den ältesten und den jüngsten Eintrag.
class Listenelement {
private Object info;
private Listenelement nächstes;
Listenelement(Object info); //
Konstruktor
Object infoLesen();
Listenelement naechstes();
void anhaengen(Listenelement l);//
Liste verlängern; verkürzen mit
nil-Parameter
}
Aufgabe 2. (ca. 12 Programmzeilen): Implementieren Sie die Klasse Warteschlange(FIFO-Liste) mithilfe der Klasse Listenelement. Definieren Sie alle erforderlichen Variablen, und programmieren Sie nur die beiden Methoden eintragen und entfernen.
public class Warteschlange {
public boolean leer();
public void eintragen(Object o);
public void entfernen() throws LeerAusn;
public Object lesen()throws LeerAusn;
}
Aufgabe 3. (ca. 16 Programmzeilen): In einer Bahnhofshalle gibt es fünf Fahrkartenschalter. Sie können geöffnet oder geschlossen sein; an einen geschlossenen Schalter kann man sich nicht mehr anstellen. Implementieren Sie die Klasse Bahnhofshalle mit einer Reihung von fünf Warteschlangen und einer Reihung von Öffnungszuständen. Programmieren Sie nur die Methoden anstellen und schalterSchliessen (anstellen an einen geschlossenen Schalter führt zur Ausnahme).
class Bahnhofshalle {
public void anstellen(int schalter, Object kunde) throws
GeschlossenAusn;
public void abfertigen(int schalter) throws LeerAusn;
public void schalterSchliessen(int schalter);
public void schalterOeffnen(int schalter);
public boolean schalterOffen(int schalter);
}
Aufgabe 4.: Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig
Die Ausführung der
paint-Methode
eines Applets oder einer Swing-Komponente
( ) Falsch erfolgt über einen polymorphen
Aufruf.
Grund:
( ) Richtig Ein Konstruktor kann alle Methoden
der aktuellen Klasse und ihrer Oberklasse aufrufen.
( ) Falsch
Grund:
( ) Richtig
Um eine Methode polymorph aufrufen zu können, ist es notwendig,
( ) Falsch
daß alle Unterklassen diese Methode überschreiben.
Grund:
( ) Richtig
Der Typ einer Variable kann zur Laufzeit nicht verändert werden.
( ) Falsch
Grund:
( ) Richtig
Die Anzahl der Elemente in der Reihung-Implementierung eines Multibehälters kann
( ) Falsch
nach der Erzeugung des Multibehälter-Objekts nicht mehr verändert werden.
Grund:
( ) Richtig
Eine Zählschleife (for..) ist ist besser zum Durchlaufen einer
verketteten Liste geeignet als
( ) Falsch
eine rekursive Methode.
Grund:
( ) Richtig
Allgemeine Datenbehälterklassen (z.B.Vector) werden in der Regel sowohl
erweitert als
( ) Falsch
auch
ausgeprägt, um spezielle Datenbehälter (z.B.Stack) zu implementieren.
Grund:
( ) Richtig
Das Paket
java.io
ist so organisiert, dass man Verarbeitungsströme (z.B.PrintStream)
( ) Falsch
mit anderen Strömen (z.B.FileOutputStream)
über den Konstruktorparameter verknüpft
Grund:
Aufgabe 5. (ca. 12 Programmzeilen): Schreiben Sie ein Applet Piepsknopf, in dem Sie einen Knopf (JButton) erzeugen und ihn mithilfe der Klasse Knopflauscher piepsen lassen.Vervollständigen Sie die Klasse Knopflauscher, indem Sie in der actionPerformed-Methode die Methode beep() der der Klasse java.awt.Toolkit aufrufen. Ein Objekt dieser Klasse erhalten Sie über die statische Methode getDefaultToolkit der Klasse java.awt.Toolkit. Registrieren für den Knopf Sie ein Knopflauscher -Objekt
public class Piepknopf extends java.applet.Applet { // in init() Knopf erzeugen und Lauscher registrieren! } }
public class Knopflauscher implements java.awt.event.ActionListener { public void actionPerformed(java.awt.event.ActionEvent ereignis) { // hier das Piepsen programmieren! } }