Nachklausur Pr25 SS' 01


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. Schrei­ben Sie die Lösungen auf lee­re nummerierte Blätter mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blät­ter (auch die Schmier­blät­ter) ab. Für falsche oder nicht einleuchtende Lösungen be­kommen Sie grund­sätz­lich kei­ne Punk­te. Wenn aber aus Ihren Notizen oder Be­merkungen er­sicht­lich ist, dass Ihr Gedankengang richtig war, kön­nen Sie Teil­punkte bekommen. Sie ver­lie­ren jedoch diese Möglichkeit, wenn Abschreiben oder Kommu­ni­ka­ti­on wäh­rend der Klau­­sur 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 beant­wor­tet. 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 Farbmenge­Impl-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 Farbmenge­Impl) 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 Stich­worten (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;
    ...