Nachklausur Pr22 SS'07


Aufgabe 1. (ca. 10 Programmzeilen): NodeList ist leider (noch) nicht Iterable, so kann man z.B. nach

NodeList elemente = xpath.evaluate(xpathAusdruck);

nicht die verbesserte for-Schleife

for (Node element : elemente) …

schreiben. Erstellen Sie also eine Klasse IterableNodeList (mit einer gekapselten NodeList-Objekt, das im Konstruktor übergeben wird), die die Schnittstelle Iterable implementiert (damit die verbesserte for-Schleife – wie oben – verwendet werden kann). Sie enthält nur eine Methode:

Iterator iterator(); // liefert Iterator-Objekt, mit dem NodeList durchlaufen werden kann

Sie müssen hierzu die Schnittstelle java.util.Iterator implementieren:

interface Iterator<T> {
   T next(); // schaltet zum nächsten Element und liefert es
   boolean hasNext(); // besagt ob es weitere Elemente gibt
   void remove(); } // kann hier leer implementiert werden

Sie brauchen dabei folgende Methoden von NodeList:

int getLength(); // liefert die Anzahl der Node-Objekte in NodeList
Node item(int index); // liefert das Node mit dem gegebenen index

Aufgabe 2: Eine doppelt verketteter Ring ist sowohl vorwärts wie auch rückwärts verkettet:

class DoppeltVerketteterRing<Element> { private Knoten anker; … } 

anker referenziert hierbei einen beliebigen Knoten (irgendwo mitten im Ring). Zeichnen Sie nun einen solchen Ring mit 3 Elementen (als Objektdiagramm), und fügen Sie ein neues Element nach dem von anker referenzierten Element ein. anker referenziert zum Schluss das neue Element.

Programmieren Sie die Klasse Knoten und die Methode einfügen.

Aufgabe 3: Schreiben Sie eine Methode finden, die feststellt, ob ein DoppeltVerketteterRing-Objekt (aus der Aufgabe 2) ein gegebenes Objekt enthält oder nicht.


Aufgabe 4: Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stich­worten dazu. Ohne Begründung gilt Ihre Antwort als falsch.

(     )     Richtig            View kennt Control, damit er die Darstellung bei Eingaben aktualisieren kann.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Die logische Gleichheit von Stapeln ist eine tiefe Gleichheit.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein generisches Warteschlangenobjekt ist in der Lage, sowohl int-Werte
(     )     Falsch            wie auch Wochentag-Objekte zu speichern.

Grund:                                                                                                                                                                                                        

(     )     Richtig            PipedInputStream ist kein Filterstrom sondern ein Behälterstrom.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            In einem DTD wird definiert, welche XML-Dokumente valide sind und welche nicht.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Shell-Sort ist eine verbesserte Version von Quicksort.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Fürs Threads müssen in Java die Methoden run und start programmiert werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Stromobjekte werden über spezielle Methodenaufrufe verkettet.
 (    )     Falsch            

Grund:                                                                                                                                                                                                        


Aufgabe 5: In der Vorlesung wurde die Klasse Animator vorgestellt, mit der in gegebenen Zeitintervallen Veränderungen in einem Frame-Objekt dargestellt werden können (wie auch in der letzten Übung):

class Animator extends Thread {
   private Frame rahmen;
   public Animator(Frame rahmen) {
     this.rahmen = rahmen;
   }
   public void run() {
     …

Programmieren Sie nun die Methode run fertig und schreiben Sie ihren Aufruf im Konstruktor der Klasse

public class EimerAnimation extends JFrame { …