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. Schrei­ben Sie die Lösungen auf diese Blätter, gegebe­nenfalls auf ein numeriertes lee­res Blatt 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, daß 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 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 Stich­worten 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.

(     )     Falsch      

Grund:                   

(     )     Richtig      Es gibt Klassen, die ohne den Aufruf einer Methode etwas tun.

(     )     Falsch      

Grund:                   

(     )     Richtig      Von einer Schnittstelle können nur abstrakte Objekte erzeugt werden.

(     )     Falsch      

Grund:                   

(     )     Richtig      Menüs sind eine Möglichkeit, die Ausführungsreihenfolge nicht im Programm festzulegen zu

(     )     Falsch      müssen.

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();

   }

}