Klausur PR11 im WS'04/'05

Aufgabe 1: In der Übung haben Sie einen Farbsack implementiert. Eine mögliche Lösung ist:

class FarbsackImpl { protected int[] inhalt;
   public FarbsackImpl() { inhalt = new int[3]; }
   public void eintragen(Farbe farbe) { inhalt[farbe.pos()]++; }
   public void enfernen(Farbe farbe) { inhalt[farbe.pos()]--; }
   public boolean vorhanden(Farbe farbe) { return inhalt[farbe.pos()] > 0; } }

Erweitern Sie nun diese Klasse um folgende Methoden:

int anzahl(Farbe farbe); // Anzahl der farbe-Objekte im Sack
int anzahl(); // Gesamtzahl aller Farbe-Objekte im Sack

Aufgabe 2.: Schreiben Sie ein minimales (kleinstes) aber vollständiges Beispiel, das die folgende Situation illustriert: „In einen Parameter vom Schnittstellentyp wird ein Objekt übergeben“. Schreiben Sie also eine (minimale) Schnittstelle, Klasse, Methodenvereinbarung (in einer Klasse) und einen Aufruf (in einem Methodenrumpf).


Aufgabe 3: Zeichnen Sie die Objektstruktur (alle Variablen, Objekte und Werte), die am Ende der folgenden main-Methode besteht:

class Klasse {
   private int var1 = 1; public int var2 = 2; static int var3 = 3;
   private Klasse objekt1; static Klasse objekt2 = new Klasse();
   public Integer objekt4 = new Integer(4);
   public static void main(String[] kzp) { Integer objekt4 = new Integer(4);
     int var4 = 4; Klasse objekt1 = new Klasse(); } }

Aufgabe 4: Definieren Sie einen Knopf im Appletfenster, der beim Klick seine Farbe verändert. Sie brauchen dazu folgende Klassen und Methoden:

class Button extends AbstractButton{ Button(String beschriftung); }
abstract class AbstractButton { void setColor(Color farbe); 
   void addActionListener(ActionListener lauscher); }
class Applet { void add(AbstractButton objekt); }
interface ActionListener { void actionPerformed(ActionEvent e); }

Aufgabe 5. (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            r.length ist dann und nur dann konstant (wird nicht im Laufe des Programms nicht verändert),
(     )     Falsch             wenn die Reihungseferenz r als final vereinbart wurde

Grund:                                                                                                                                                                                                        

(     )     Richtig            Im Rumpf einer Prozedur mit Parametertyp Object kann für den Parameter
(     )     Falsch             die Methode toString aufgerufen werden, compareTo jedoch nicht.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Im Rumpf einer Zählschleife darf auf die Laufvariable
(     )     Falsch             nur lesend zugegriffen werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Als Ausgabeparameter einer Prozedur kann nicht
(     )     Falsch             eine primitive Variable verwendet werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Für ein Ausnahmeobjekt können keine Methoden aufgerufen werden.
(     )     Falsch

Grund:                                                                                                                                                                                                        

(     )     Richtig            Operatoren können in Java nur auf primitive Variablen
(     )     Falsch             und nie auf Referenzvariablen angewandt werden.

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein Mutator darf nicht als aktueller Parameter aufgerufen werden.
(     )     Falsch            

Grund:                                                                                                                                                                                                        

(     )     Richtig            Ein String-Objekt verhält sich in jeder Hinsicht wie ein char[]-Objekt,
(     )     Falsch             der Unterschied ist nur syntaktisch.

Grund:                                                                                                                                                                                                        


Aufgabe 6: Schreiben Sie eine boolean-Methode, die feststellt, ob Ihr Name (your name) als Kommandozeilenparameter an die main-Methode übergeben wurde oder nicht. Schreiben Sie auch eine main-Methode, die sie aufruft.