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. Ihr Ergebnis wird im Internet veröffentlicht, wenn sie oben ein Pseudonym angegeben haben.
Klausurtermin: 6. April 2000, um 10:00 - 11:30 Uhr Raum B 412 (Haus Gauß)
Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):
Aufgabe 1. (ca. 10 Programmzeilen) Gegeben ist die Spezifikation der Datenbehälterklasse Punktanzeige (z.B. für Sportwettkämpfe):
public class Punktanzeige {
public void punkt(); // Anzeige
um eins erhöhen
public void blinken(); // Wert
3x blinkend anzeigen
public void zuruecksetzen(); //
Anzeige auf 0 setzen
}
Schreiben Sie nun eine (dynamische) Datenbehälterklasse Doppelzaehler mit zwei Punktanzeigen, die folgende Methoden exportiert :
public class Doppelzaehler {
public void punktLinks();
public void punktRechts();
public void neuesSpiel(); //
Beide Zaehler auf 0 und Blinken
}
Schreiben Sie auch eine kurze main-Methode, in der zwei Doppelzaehler-Objekte (z.B. für eine Doppelfeld-Sporthalle) erzeugt werden und mit dem Aufruf von neuesSpiel() gestartet werden.
Aufgabe 2. (ca. 18 Programmzeilen) Beim Tischtennis (TT) gilt folgende (vereinfachte) Spielregel: Ein Spieler hat 5 Angaben nacheinander, dann ist der Gegenspieler an der Reihe. Nach insgesamt 21 Punkten endet der Satz. Das Zählwerk zeigt immer links die Punkte der Angabeseite, rechts die der Gegenseite. Schreiben Sie nun eine (dynamische) Datenbehälterklasse TTZaehlwerk mit zwei Punktanzeigen, die folgende Methoden exportiert (Die beiden Ausnahmen Angabewechsel und Satzende können Sie als definiert voraussetzen):
public class TTZaehlwerk {
public void punktAngabe() throws Angabewechsel, Satzende;
// Punkt für die Angabeseite, danach ggf. Ausnahme
public void punktGegenseite() throws Angabewechsel, Satzende; // wie oben für die Gegenseite
public void angabewechsel(); // Vertauschen der Zähler und Blinken
}
Hinweise:Um die Ausnahmen auszulösen, benötigen Sie eine private int-Variable (punktzahl), in der Sie alle Punkte mitzählen. Ob ein Angabewechsel erforderlich ist, können sie mit dem booleschen Ausdruck punktzahl%5==0 überprüfen. Außerdem benötigen Sie eine dritte Punktanzeige-Referenz, um die Zähler bei Angabewechsel zu vertauschen.
Lösung auf dem Extrablatt Nr. _________ ( 0 5 10 15 20 25 30 35 40 )
Aufgabe 3. Zeichnen Sie die vollständige Datenstruktur (alle Objekte und alle Referenzen, die darauf zeigen) des main-Programms aus Aufgabe 1.
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 Zuweisung ist ein Operator zur Veränderung von Datenobjekten.
( ) Falsch
Grund:
( ) Richtig Der Ausdruck 3*(4.0 / 17) liefert einen Wert vom Typ float.
Grund:
( ) Richtig Es gibt Klassen, die ohne den Aufruf einer Methode etwas tun.
Grund:
( ) Richtig Von einer Schnittstelle können nur abstrakte Objekte erzeugt werden.
Grund:
( ) Richtig Menüs sind eine Möglichkeit, die Ausführungsreihenfolge nicht im Programm festzulegen zu
Grund:
( ) Richtig Es gibt Klassen, die nicht ausprägbar sind.
( ) Falsch
Grund:
( ) Richtig Die folgenden geschachtelten Schleifen drucken 24 Sterne:
( ) Falsch for (int i=0; i<4; i++) for (int j=0; j<=5; j++) System.out.print("*");
Grund:
( ) Richtig Wenn eine Klasse ausgeprägt werden soll, muss darin ein Konstruktor programmiert sein.
( ) Falsch
Grund:
Aufgabe 5. Schreiben Sie die Ausgabe des folgendes Programm auf. Begründen Sie Ihre Lösung mit einem Satz.
class A { void ausgabe() { System.out.println("A"); } }
class B extends A { void ausgabe() { System.out.println("B"); } }
class C extends B { void ausgabe() { System.out.println("C"); } }
public class D {
public static void main(String[] args) {
A a = new A(); B b = new B(); C c = new C();
aktion (a); aktion (b); aktion (c);
a = c;
aktion (a); aktion (b); aktion (c);
}
private static void aktion(A x) {
x.ausgabe();
}
}