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:publicclass 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 classFahrstuhlMenueAufg 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.( ) 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:
Zur Implementierung von
Scanner steht die Klasse Eingabestrom zur Verfügung, die insbesondere die Methode zeichenEinlesen() exportiert (wie in der Übung).public interfaceScanner { 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; }
importlehrbuch.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(); ... } }