Nachklausur Prg12 im WS'05/'06

Aufgabe 1: In der Vorlesung haben wir eine Farbmenge implementiert. Ähnlich sieht eine Ziffernmenge aus:

class ZiffernmengeImpl { protected boolean[] inhalt = new boolean[10]; // 0 bis 9
   public void eintragen(char z) { if (Character.isDigit(z)) inhalt[z] = true; }
   public void enfernen(char z) { if (Character.isDigit(z)) inhalt[z] = false; }
   public boolean vorhanden(char z) { return (Character.isDigit(z)) && inhalt[z]; } }

Erweitern Sie nun diese Klasse (mit extends) um folgende Methoden (ca. 9 Programmzeilen):

int anzahl(char z); // Anzahl der vorhandenen Ziffern z in der Menge
int anzahl(); // Gesamtzahl aller Ziffern in der Menge

Aufgabe 2: Zeichnen Sie die Objektstruktur (alle Variablen, Objekte und Werte) eines Stapelobjekts, die nach dem folgenden Programmausschnitt besteht:

Stapel s = new Stapel(); s.eintragen(new Button("Hallo!")); s.eintragen(1); // autoboxing
s.eintragen(new Eimer()); s.entfernen();

Die Klasse Stapel wurde hierbei folgendermaßen implementiert (vereinfacht: ohne Ausnahmen):

class Stapel { private int spitze = -1; private Object[] inhalt = new Object[5];
   private void eintragen(Object element) { inhalt[++spitze] = element; }
   private void entfernen() { spitze--; } }

Aufgabe 3: Programmieren Sie eine Knopf, das beim Drücken piepst. Sie brauchen dazu folgende Klassen und Methoden:

package java.awt;
public class Frame { public void add(Button knopf); … }
public class Button {
   public Button(String beschriftung);
   void addActionListener(java.awt.event.ActionListener lauscher); … }
interface ActionListener { void actionPerformed(java.awt.event.ActionEvent e); … }

Folgender Methodenaufruf bewirkt ein Piepton:

java.awt.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            Globale Variablen heißen global, weil sie außerhalb von Klassen vereinbart werden.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine static-Variable kann in einer Methode vereinbart werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein Objekt kann gleichzeitig von drei Referenzen referenziert werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            javadoc erzeugt die Dokumentation aus dem Quellcode
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Wenn die Anzahl der Wiederholungen zu Programmierungszeit bekannt ist,
(     )     Falsch             kann eine Zählschleife verwendet werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Eine aufgerufene Methode muss in der Klasse des Objekts vereinbart werden,
(     )     Falsch             für welches sie aufgerufen wird.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Die Ordnungsoperatoren <, <=, > und >= sind in Java für Operanden aller Typen definiert.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Die Schnittstelle Comparable enthält nur eine parameterlose Methode.
(     )     Falsch            

Grund:                                                                                                                                                                                                        


Aufgabe 5: Die folgende Klasse Ampel bedient drei Kreise:

import lehrbuch.Kreis;
public class Ampel {
   private Kreis rot, gelb, grün; int zustand;
   public Ampel() {
     rot = new Kreis(); rot.zeichnen(); rot.bemalen(Kreis.ROT);
     gelb = new Kreis(); gelb.zeichnen(); gelb.bemalen(Kreis.BLAU); gelb.verstecken();
     grün = new Kreis(); grün.zeichnen(); grün.bemalen(Kreis.GRUEN); grün.verstecken();
     zustand = 0; } …
Programmieren Sie die Methode rückwärts() dieser Klasse. Der (wiederholte) Aufruf dieser Methode versetzt die Ampel in ihren vorherigen Zustand (also andersrum als in der Hauptklausur): Zu Anfang wird (wie oben programmiert) Rot angezeigt. Der erste nächste Aufruf soll auf Gelb schalten (Methode Kreis.wiederherstellen); der nächste auf Grün; der nächste auf Gelb-Rot, danach wieder Rot und es fängt alles von vorne an. Benutzen Sie die globale Variable zustand, um sich den Zustand der Ampel (zyklisch) zu merken.