Klausur PR12 im WS'06/'07

Aufgabe 1 (ca. 6 Programmzeilen, ohne die Zeilen mit nur Klammern): Die Schnittstelle Ausgabe enthält eine parameterlose Prozedur ausgabe. Sie wird in einem Programm benutzt:

static void programm(Ausgabe objekt) { … objekt.ausgabe(); … }

Zwei Kunden verlangen unterschiedliches Verhalten, wenn die Methode programm aufgerufen wird. Kunde A möchte eine Konsolausgabe (über System.out.println("Ausgabe");), Kunde B möchte ein Meldungsfenster (wie lehrbuch. Pro­gramm.meldung("Ausgabe");) sehen. Implementieren Sie nun die Schnittstelle zweimal (für die beiden Kunden) und testen Sie beide Implementierungen in einer main-Methode, indem sie darin zweimal die Methode programm aufrufen.


Aufgabe 2 (ca. 11 Strukturelemente): Zeichnen Sie die Objektstruktur (alle Variablen, Objekte und Werte) nach der folgenden Programmzeile in der main-Methode :

ZweiObjekte r1 = new ZweiObjekte(); ZweiObjekte r2 = new ZweiObjekte(r1);

wenn die folgenden Klassenvereinbarungen bestehen:

class ZweiObjekte {
   protected Object erstes, zweites;
   protected static int zaehler = 0;
   ZweiObjekte() { erstes = new Object(); zweites = new Object(); zaehler++; }
   ZweiObjekte(ZweiObjekte z) { erstes = z.erstes; zweites = z.zweites; zaehler++; } }

Stellen Sie dar, welche Strukturelemente (Variablen, Objekte) in welchem Speicherbereich (Stapel/stack, Halde/heap, Klasse/static-Bereich) liegen. Vergessen Sie nicht, den Inhalt der Variablen darzustellen.


Aufgabe 3 (ca. 9 Programmzeilen): Programmieren Sie eine spezielle Knopfklasse (als Erweiterung von Button), deren Objekte beim Drücken immer eine Konsolausgabe (System.out.println) bewirken (Tipp: sorgen Sie im Konstruktor dafür). Erzeugen Sie ein Objekt Ihrer Klasse in einem Programmabschnitt, das beim Klicken (zusätzlich zur Konsolausgabe) piepst (Tipp: zweiter Lauscher). Sie brauchen dazu folgende Klassen und Methoden:

package java.awt;
class Button { void addActionListener(java.awt.event.ActionListener lauscher); … }
class ActionListener { void actionPerformed(java.awt.event.ActionEvent e); … }

Folgender Methodenaufruf bewirkt einen Piepton:

java.awt.Toolkit XE "Toolkit" .getDefaultToolkit XE "getDefaultToolkit" ().beep XE "beep" ();

Aufgabe 4. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stich­worten (nicht länger als die Zeile) dazu. Ohne Begründung gilt Ihre Antwort als falsch.

(     )     Richtig            Ein String-Objekt kann nicht verändert werden.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            println() ist eine Methode der Klasse System.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine anonyme Klasse kann nur einmal ausgeprägt werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein String kann keine Anführungszeichen enthalten,
(     )     Falsch             weil das zweite Anführungszeichen das Ende des String-Literals bedeutet.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Wenn die Anzahl der Wiederholungen von Benutzereingaben abhängt,
(     )     Falsch             kann keine Zählschleife verwendet werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            1.2 ist ein float-Literal.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            for (i = 1; i <= 10; i++) meldung("nächste Zahl = " + i);
(     )     Falsch             ist keine Zählschleife (ist nicht garantiert endlich)

Grund:                                                                                                                                                                                                        

(     )     Richtig            In Java gilt immer: Objekte werden durch Methoden, primitive Werte durch Operatoren manipuliert.
(     )     Falsch            

Grund:                                                                                                                                                                                                        


Aufgabe 5 (ca. 6 Programmzeilen): Schreiben Sie eine Funktion reste, die die Reste von Ganzzahldivisionen errechnet. Im ersten Parameter (vom Typ int-Reihung) werden die Dividenden (Nenner, was geteilt werden soll), im zweiten (vom selben Typ derselben Länge) die Divisoren (Zähler, womit man teilt) übergeben. Der Aufruf mit den Parametern 20, 21, 22 und 3, 4, 5 soll also die int-Reihung aus 2, 1, 2 liefern, weil 20%3=2 (18+2=20), 21%4=1 (20+1=21) und 22%5=2 (20+2=22).

Beschreiben Sie die Voraussetzungen (Sie müssen sie nicht im Programm überprüfen), damit Ihre Methode korrekt läuft.