Aufgabe 1 (ca. 12 Programmzeilen): Steuern Sie einen Eimer mit einem Knopf in einer Mehrzweckklasse. Beim Drücken des Knopfes soll der Eimer (je nach Zustand) gefüllt oder entleert werden. Verwenden Sie dabei keine if-Anweisung. Sie brauchen hierfür folgende Klassen:
class Frame { void add(Button knopf); … } class Button { void addActionListener(ActionListener lauscher); … } interface ActionListener { void actionPerformed(ActionEvent e); … } class Eimer { void fuellen() throws VollAusnahme; void entleeren() throws LeerAusnahme; }
Aufgabe 2 (ca. 11 Strukturelemente): Zeichnen Sie die Objektstruktur (alle Variablen, Objekte, Werte) in der Aufgabe 1. Wenn Sie sie nicht gelöst haben (0 Punkte), können Sie eine Ersatzaufgabe bekommen.
Aufgabe 3 (7-10 Programmzeilen): Die Funktion integral berechnet den bestimmten Integral einer beliebigen double-Funktion mit einem double-Parameter, wie z.B. java.lang.Math.sqrt (für die Berechnung von Quadratwurzeln) oder Math.sin (für die Berechnung von Sinus-Werten). Ihre Signatur ist:
static double integral(Funktion funktion, double von, double bis); // im Intervall von - bis
Funktion ist dabei eine Schnittstelle, deren Implementierung die zu integrierende Funktion enthält:
interface Funktion { double funktion(double x); };
Implementieren Sie nun diese Schnittstelle zweimal (für die beiden Funktionen Math.sqrt und Math.sin) und testen Sie beide Implementierungen in einer main-Methode, indem sie darin die Methode integral für das Intervall 0 bis 1 zweimal aufrufen und das Ergebnis auf die Konsole ausgeben.
Bemerkung: Die Aufgabe erfordert keinerlei Mathematik-Kenntnisse. Sie müssen nicht wissen, wie ein Integral berechnet wird. Sie müssen nur wissen, wie eine Schnittstelle implementiert und eine Funktion aufgerufen wird.
Aufgabe 4. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten (nicht länger als die Zeile) dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig
Die Größe des Reihungsobjekts in einem
Vector-Objekt
wird bei Bedarf verändert.
( ) Falsch
Grund:
( ) Richtig
Durch die Anweisung
for(print(1);
print(2); print(3)) print(4)
( ) Falsch werden die Zahlen in der
Reihenfolge 1 2 4 3
durch print()
ausgegeben.
Grund:
( ) Richtig
Der Operator +
ist nicht für alle primitive Typen definiert.
( ) Falsch
Grund:
( ) Richtig
Wenn im catch-Block
keine throw-Anweisung
steht,
( ) Falsch erfährt der Benutzer nichts von der
Ausnahmesituation.
Grund:
( ) Richtig
Die Veränderung an einer Parametervariable bleibt lokal.
( ) Falsch
Grund:
( ) Richtig In
einer static-Methode
kann kein this
verwendet werden.
( ) 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
Parametervariablen können unter Umständen auf der Halde gespeichert werden.
( ) Falsch
Grund:
Positionieren Sie Ihre Methode in der folgenden Tabelle für Datenfluss:
Eingabe Ausgabe |
Parameter call by value |
Parameter call by reference |
globale Variable |
Funktionswert |
|
|
|
Parameter |
|
|
|
globale Variable |
|
|
|