Name: _____________________________________________ Matrikel-Nr.: __________
Platznummer: ______ (vom Betreuer einzeln vergeben) erster ( ) zweiter ( ) letzter ( ) Versuch
Pseudonym: __________________ (wenn Sie möchten, dass Ihr Klausurergebnis im Internet veröffentlicht wird)
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 leere nummerierte Blätter 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 wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet. Die Aufgaben sind ungefähr gleich aufwendig und sind je 40 Punkte wert.Klausurtermin: Montag, den 8. Oktober 2001
Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):
Aufgabe 1: In der Übung haben Sie die Schnittstelle Warteschlange als verkettete Liste implementiert. Erweitern Sie diese Klasse um eine int-Methode anzahl, die besagt, wie viele Elemente die Warteschlange enthält.
Die Datenstruktur aus der Musterlösung ist:
public class WarteschlangeListe implements Warteschlange { private class Knoten { Object wert; Knoten verbindung; Knoten(final Object wert, final Knoten verbindung) { this.wert = wert; this.verbindung = verbindung; } } private Knoten aeltester, juengster; ...
Aufgabe 2.: Sie haben eine Übungsaufgabe mit der Klasse lehrbuch.FarbmengeImpl gelöst. Ihre Spezifikation ist:
public class FarbmengeImpl { // Spezifikation public void eintragen(lehrbuch.Farbe farbe); public void entfernen(lehrbuch.Farbe farbe); public boolean vorhanden(lehrbuch.Farbe farbe); }
Schreiben Sie eine Klasse FarbmengeMitSicherung mit der zusätzlichen Methode
public boolean wiederherstellen();
die die letzte Änderung (Aufruf eines Mutators) rückgängig machen kann. Hierzu müssen Sie ein zweites FarbmengeImpl-Objekt als Sicherung (Backup) anlegen, in das vor der Veränderung der aktuelle Zustand gespeichert wird; von hier kann er wiederhergestellt werden. Dabei können Sie die von Object überallhin (so auch an FarbmengeImpl) vererbte Methode clone benutzen:
public Object clone(); // liefert eine Kopie des aktuellen Objekts
Bemerkung: Die Benutzung von clone ist in der Wirklichkeit einiges komplizierter (u.A. sie ist protected); benutzen Sie jetzt jedoch diese vereinfachte Sicht.
Aufgabe 3: Schreiben Sie ein swing-Applet mit einem Knopf (JButton) und drei Beschriftungsfelder (JLabel). Bei jedem Knopfdruck soll im ersten Feld die angezeigte Zahl (int) erhöht werden (ein Zähler für Knopfdrücke), im zweiten Feld der Buchstabe (A-Z, nach Z wieder A), im dritten die Farbe (z.B. mit setBackground(Color.Red) ) soll verändert werden.
Aufgabe 4. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten (nicht länger als die Zeile) dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig Von einer Klasse kann ein
Objekt nur dann erzeugt werden,
( ) Falsch wenn sie einen (impliziten
oder expliziten) public-Konstruktor enthält.
Grund:
( ) Richtig In Java werden
Parameterobjekte immer „call by reference“ übergeben,
( ) Falsch während in C++ nur, wenn der
Programmierer dies explizit angibt.
Grund:
( ) Richtig C++-Objekte sind
typischerweise größer als Java-Objekte.
( ) Falsch In Java werden dafür
typischerweise mehr Objekte erzeugt.
Grund:
( ) Richtig C++-Klassen können Operatoren
enthalten,
( ) Falsch während Java-Klassen nie.
Grund:
( ) Richtig Das dynamische Binden findet
in Java zur Laufzeit, in C++ vor der Laufzeit statt.
( ) Falsch
Grund:
( ) Richtig
Ein new-Aufruf in
einem Destruktor produziert immer eine Speicherleiche.
( ) Falsch
Grund:
( ) Richtig Aus einem Sack können
enthaltene Elemente in beliebiger Reihenfolge entfernt werden,
( ) Falsch während aus einem Stapel
nicht.
Grund:
( ) Richtig Der Zugriff auf das length-te Element einer Reihung
löst immer eine Ausnahme aus.
( ) Falsch
Grund:
Aufgabe 5.: Zeichnen Sie die Datenstruktur einer Warteschlange als Reihung der Länge 4, in die die Button-Objekte mit der Beschriftung "erster", "zweiter" und "dritter" eingetragen, dann ausgetragen, anschließend "vierter", "fünfter" und "sechster" eingetragen worden sind. Die Datenstruktur der Warteschlange aus der Musterlösung ist:
class WarteschlangePol implements Warteschlange { private Object[] inhalt; private int juengstes, aeltestes, anzahl; ...