Klausur PR11 im WS99/00

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: 25. Januar 2000 10:00 - 11:30 Uhr Raum B 101 (Haus Gauß)

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


Aufgabe 1. (ca. 18 Programmzeilen): Gegeben ist die Spezifikation der Datenbehälterklasse Fahrstuhl:

public class Fahrstuhl { // Anfangszustand unten mit geoeffneter Tuer
	public void tuerOeffnen() throws TuerAusn;
	public void tuerSchliessen() throws TuerAusn;
	public void aufwaerts() throws RichtungsAusn;
	public void abwaerts() throws RichtungsAusn;
}

Der Fahrstuhl bedient nur zwei Stationen (oben und unten). Die Ausnahmen bedeuten, dass der Zielzustand bereits vorliegt (z. B. Tür ist schon offen). Schreiben Sie nun eine statische Datenbehälterklasse ZweiFahrstuehle, die zwei Fahrstühle verwaltet und die statischen Methoden tuerOeffnenLinks(), tuerOeffnenRechts() usw. exportiert. Die Methoden sollen fehlertolerant sein. Schreiben Sie auch eine main-Methode, in der Sie einige ihrer Methoden zu Testzwecken aufrufen.

Hinweis: Es genügt, wenn Sie die Methoden tuerOeffnenLinks() und aufwaertsLinks() programmieren, die übrigen Methoden denken wir uns ananlog.


Aufgabe 2. (ca. 20 Programmzeilen): Schreiben Sie ein Programm, das einen Fahrstuhl menügesteuert betreibt. Ihnen steht die aufgeschobene Menüklasse FahrstuhlMenüAufg mit folgender Spezifikation zur Verfügung:

public abstract class FahrstuhlMenueAufg extends java.applet.Applet {
	abstract protected void tuerAuf();
	abstract protected void tuerZu();
	abstract protected void hochfahren();
	abstract protected void hinunterfahren();
	public void menue();
	public void start();
}

Achten Sie darauf, dass Ihre Rückrufmethoden fehlertolerant sein müssen!

Hinweis: Auch hier genügt es, wenn Sie die Methoden tuerAuf(), hochfahren() und start() programmieren, die übrigen Methoden denken wir uns ananlog.


Aufgabe 3.: 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 folgende Zählschleife wird 100 mal ausgeführt:
( ) Falsch for (int zaehler=0; zaehler<100; zaehler--) anweisung;
Grund:

( ) Richtig Die Zuweisung Klasse1 ref = new Klasse2(); ist nur dann zulässig, wenn Klasse2 eine Oberklasse von Klasse1 ist.
( ) Falsch
Grund:

( ) Richtig Der Ausdruck 3*(4.0f / 17) liefert einen Wert vom Typ float.
( ) Falsch
Grund:

( ) Richtig Eine Klasse besitzt nur dann einen Konstruktor, wenn er explizit in der Klasse definiert ist.
( ) Falsch
Grund:

( ) Richtig Ein private-Konstruktor verhindert, dass die Klasse ausgeprägt wird.
( ) Falsch
Grund:

( ) Richtig Die Anweisung Object ob1 = new Integer(4); ist zulässig; die Anweisung Object ob2 = 4; ist unzulässig
( ) Falsch
Grund:

( ) Richtig Die Ausführung der start()-Methode eines Applets erfolgt über einen polymorphen Aufruf.
( ) Falsch
Grund:

( ) Richtig Es gibt Klassen, die ohne den Aufruf einer ihrer Methoden etwas tun.
( ) Falsch
Grund:


Aufgabe 4. (ca. 14 Programmzeilen) Schreiben Sie eine Klasse Wortleser, die das interface Scanner teilweise implementiert: Programmieren Sie die Methoden leerzeichen(), naechstesZeichen() und leerzeichenUeberlesen() und legen Sie alle dazu erforderlichen Objekte und Referenzen an. Die übrigen Methoden lassen Sie unimplementiert.(damit ist ihre Klasse aufgeschoben und muss als abstract gekennzeichnet werden).

Zur Implementierung von Scanner steht die Klasse Eingabestrom zur Verfügung, die insbesondere die Methode zeichenEinlesen() exportiert (wie in der Übung).

public interface Scanner {
	public String wortEinlesen() throws DateiendeAusn;
	public void leerzeichenUeberlesen() throws DateiendeAusn;
	public void naechstesZeichen() throws DateiendeAusn;
	public boolean leerzeichen();
	public boolean komma();
}
public class Eingabestrom {
	public char zeichenEinlesen() throws DateiendeAusn;
}

Aufgabe 5. Zeichnen Sie die Datenstruktur (alle Objekte und alle Referenzen, die auf sie zeigen; Referenzen mit Namen, Objekte mit Klassennamen) aus dem folgenden Programmausschnitt:

import lehrbuch.Kreis, lehrbuch.Eimer;
class KreisUndEimer {
	private Kreis kreis = new Kreis();
	private Eimer eimer = new Eimer();
	...
}
public class KreisUndEimerProgramm extends java.applet.Applet {
	public void start() {
		KreisUndEimer links = new KreisUndEimer(), rechts = new KreisUndEimer();
		...
	}
}