Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Missverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf diese Blätter, bzw. auf ein nummeriertes 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, dass 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 (was von Ihnen erwartet wird) wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet.Klausurtermin: 6. Juli 2005 ● Rückgabe: 13. Juli 2005 in der Vorlesung
Aufgabe 1: Die Klasse WS (wie Ihre Warteschlange-Übungslösung) implementiert die Schnittstelle Iterable mit einer einzigen parameterlosen Funktionsmethode iterator, die ein Objekt liefert, dessen Klasse Iterator implementiert:
interface Iterator { Object next(); boolean hasNext(); void remove(); }
Implementieren Sie mit Hilfe dieses Iteratorobjekts die Methode
static boolean istGleich(WS links, WS rechts);
Aufgabe 2: Eine mögliche Implementierung der Schnittstelle Farbmenge (für ein enum Farbe{r, g, b}; ) ist:
public class FarbmengeImpl implements Farbmenge {
protected boolean[] inhalt = new boolean[3];
public void eintragen(final Farbe farbe) { inhalt[farbe.ordinal()] = true; }
… } // weitere Methoden aus Farbmenge
Implementieren Sie nun die Schnittstelle
public interface PersFarbmenge extends Farbmenge { public void speichern(String dateiname); // const public void laden(final String dateiname); }
mit Hilfe der void-Methode writeObject (mit einem Object-Parameter) sowie der parameterlosen Methode readObject (liefert Object) aus den Standardklassen ObjectIn/OutputStream, deren Konstruktore je ein FileIn/OutputStream-Objekt (konstruierbar mit dem Dateinamen als String) brauchen.
public void entfernen(final Object element) { for (int index = 0; index <= spitze; index++) if (inhalt[index] == element) { inhalt[index] = inhalt[spitze]; spitze--; return; } private Object[] inhalt; private int spitze;
Zeichnen Sie ein Sack-Objekt mit vier Einträgen von denen der 2. und 4. ist element. Zeichen Sie den Zustand vor dem Ablauf und am Ende der Methode entfernen (entweder mit einer anderen Farbe oder mit einer zweiten Zeichnung). Vergessen Sie die lokale Variable index nicht.
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 Bessere
Zeitkomplexität eines Sortierverfahrens muss immer
( ) Falsch mit schlechterer Speicherkomplexität erkauft
werden.
Grund:
( ) Richtig Die Reihenfolge
der Eintragungen in einen Standard-Multibehälter
( ) Falsch ist immer relevant (wichtig).
Grund:
( ) Richtig Ein Brückenstrom
verbindet Ein- und Ausgabeströme miteinander
( ) Falsch
Grund:
( ) Richtig Nebenläufige
Prozesse in Java werden immer
( ) Falsch mit der Implementierung der Schnittstelle
Runnable programmiert.
Grund:
( ) Richtig Es gibt Schleifen
in Java,
( ) Falsch deren Endlichkeit vom Compiler garantiert wird.
Grund:
( ) Richtig Ein generischer
Multibehälter kann Objekte
( ) Falsch beliebiger Klassen aufnehmen.
Grund:
( ) Richtig Die Darstellung
eines XML-Dokuments kann entweder in einem DTD
( ) Falsch oder in einem CSS defiiert werden.
Grund:
( ) Richtig Wenn die flache
Gleichheit false liefert,
( ) Falsch liefert auch die tiefe Gleichheit false.
Grund:
Aufgabe 5.: Skizzieren Sie eine Klasse KonsolOberflaeche so, dass der Taschenrechner (aus der Übungsaufgabe) auch von der Konsole (statt mit swing-Oberfläche) bedient werden kann. Sie können hierzu die MVC-Klassen entweder aus Ihrer Übungslösung oder von der Vorlesung nehmen. Die Schnittstellen der letzteren sind:
interface Lauscher { }
interface Rechenwerk { void ziffer(char ziff); // Lauscher void operation(char op); // Lauscher String getZahl(); } // Oberflaeche
interface Oberflaeche { void registrieren(ActionListener ziffernLauscher, ActionListener opLauscher); void anzeigen(); } // Lauscher
Benutzen Sie dazu die Klasse
class Console { void println(String s) {…} // zeigt s an der Konsole an void addActionListener(ActionListener listener) {…} } // Eingabe an der Konsole ruft listener.actionPerformed auf