Name: _____________________________________________ Matrikel-Nr.: __________

Platz: _______ erster ( ) zweiter ( ) letzter ( ) Versuch

Pseudonym: __________________ (nur wenn Sie möchten, daß 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 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:

Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):

5 15 25 35 45 55 65 75 85 95 105 115 125 135 145 155 165 175 185 195
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200
				 5,0 4,0 3,7 3,3 3,0 2,7 2,3 2,0 1,7 1,3 1,0

Aufgabe 1. (min. 9, max. 17 Programmzeilen): Gegeben ist die Spezifikation der Datenbehälterklasse Tor:

public class Tor { // Anfangszustand des Tors: geschlossen
	public void oeffnen() throws GeoeffnetAusn;
	public void schliessen() throws GeschlossenAusn;
	public boolean geoeffnet();
}

Schreiben Sie nun eine Datenbehälterklasse Tore, die eine im Konstruktorparameter gegebene Anzahl von Tor-Objekten (in einer Reihung) verwaltet. Sie soll dieselben drei Methoden wie die Tor-Klasse veröffentlichen, jedoch mit je einem int-Parameter, der ein Index des zu manipulierenden Tor-Objekts darstellt. Vergessen Sie nicht im Konstruktor neben der Reihung auch die Tor-Objekte zu erzeugen.


Aufgabe 2. (min. 11, max. 19 Programmzeilen): Schreiben Sie ein Hauptprogramm (main) mit zwei globalen Tore-Objekten (aus der vorherigen Aufgabe 1) und einer Prozedur. Diese hat zwei Parameter: ein Tore-Objekt und ein Index. Sie öffnet das entsprechende Tor und schließt es dann wieder. Rufen Sie die Prozedur so oft auf, daß alle Ihrer Tor-Objekten geöffnet und geschlossen werden. Wo Sie die Ausnahmen behandeln (im Hauptprogramm oder in der Prozedur), entscheiden Sie danach, wo sie ausgelöst werden können oder aber auch nicht (am besten mit System.err. println). Bemerkung: Die Anzahl der Tor-Objekte in den einzelnen Tore-Objekten des Hauptprogramms müssen Sie wahrscheinlich in final int-Konstanten speichern, um die Länge der for-Schleifen bestimmen zu können.


Aufgabe 3.: Zeichnen Sie die Datenstruktur des Programms aus der Aufgabe 2. (alle Objekte und alle Referenzen, die darauf zeigen)


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 einer actionPerformed-Methode beim Auftreten eines registrierten Ereignisses

( ) Falsch erfolgt über einen polymorphen Aufruf.

Grund:

( ) Richtig Ein Konstruktor kann alle Methoden der aktuellen Klasse und ihrer Oberklasse aufrufen.

( ) 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 Weil die Knoten einer verketteten Liste rekursiv definiert werden, müssen alle Methoden,

( ) Falsch die die Liste durchlaufen, rekursiv sein.

Grund:

( ) Richtig Man kann alle Elemente einer verketteten Liste mit einer for-Schleife (Zählschleife) erreichen.

( ) Falsch Bemerkung: die Zählschleife ist der Art for (int i = anfang; i <= ende; i++)

Grund:

( ) Richtig Eine Referenz kann sowohl durch eine Zuweisung wie auch durch Aufruf eines Mutators

( ) Falsch für diese Referenz verändert werden.

Grund:

( ) Richtig Um eine Datei beschreiben oder daraus lesen zu können, muß man zunächst ein Objekt

( ) Falsch der Klasse java.io.File erzeugen, das die Datei identifiziert.

Grund:

( ) Richtig Zwei String-Objekte z1 und z2 können die gleiche Zeichenkette enthalten, auch wenn

( ) Falsch der Vergleich z1 == z2 das Ergebnis false liefert.

Grund:


Aufgabe 5. (min. 8, max. 13 Programmzeilen): Die Datenstruktur und der Konstruktor der Klasse WarteschlangePol aus der Musterlösung ist:

class WarteschlangePol implements Warteschlange {
	private Object[] inhalt;
	private int juengstes, aeltestes, anzahl;
	public WarteschlangePol(int groesse) { inhalt = new Object[groesse];
		anzahl = 0; aeltestes = 0; juengstes = inhalt.length-1; // letztes besetztes Feld
	}

Programmieren Sie nun die Methode gleich, die zwei Warteschlangen auf den gleichen Inhalt miteinander verlgeicht:

	public boolean gleich(final WarteschlangePol w);
	// true wenn w dieselben Einträge enthält wie das aktuelle WarteschlangePol-Objekt

Beachten Sie, daß die Gleichheit sich nur auf die Einträge der Warteschlange bezieht, nicht auf die Werte der Indizes aeltestes und juengstes. Am einfachsten arbeiten Sie mit einer for-Schleife (der Länge anzahl), zwei voneinander unabhängigen Indizes (die jeweils bei aeltestes beginnen) und dem %-Operator (um den Überlauf inhalt.length aufzufangen). Wenn anzahl oder zwei Elemente nicht gleich (Methode equals) sind, können Sie mit return false; abbrechen. Wenn die Schleife erfolgreich durchläuft, sollen Sie das Ergebnis mit return true; zurückgeben.