Nachklausur PR21 im SS'00

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!
       }
     }