Nachklausur Pr11 SS' 01


Name: _____________________________________________                                                Matrikel-Nr.: __________

Platznummer: ______  (vom Betreuer einzeln vergeben)                                       erster (   ) zweiter (   ) letzter (   ) Versuch

Pseudonym: __________________ (wenn Sie möchten, dass Ihr Klausurergebnis im Internet veröffentlicht wird)

Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Missverständnisse und Unklarheiten klären kann. Schrei­ben Sie die Lösungen auf leere nummerierte Blätter mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmier­blät­ter) ab. Für falsche oder nicht einleuchtende Lösungen be­kommen Sie grund­sätzlich kei­ne Punk­te. Wenn aber aus Ihren Notizen oder Be­merkungen er­sicht­lich ist, dass Ihr Gedankengang richtig war, kön­nen Sie Teilpunkte 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..

Klausurtermin: Montag, den 8. Oktober 2001

Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):

__________________________________________________________________________________________________

Aufgabe 1: Schreiben Sie die Buchstaben auf, die das folgende Programm ausgibt. Begründen Sie Ihre Lösung mit einem Satz:

class A { void x() { System.out.println("A"); } }
class B extends A { void x() { System.out.println("B"); } }
class C extends B { void x() { System.out.println("C"); } }
public class D {
   private static void x(A a) { a.x(); }
   public static void main(String[] args) {
     A a = new A(); A b = new B(); A c = new C();
     x(b); b = a; x(b); b = c; x(b); } }

Aufgabe 2.: Die Spezifikation der Klasse Speicher ist:

public class Speicher { // Spezifikation
   public void eintragen(Object element) throws EnthaltenAusnahme;
    // trägt element in das Speicher-Objekt ein; geprüfte Ausnahme, wenn schon enthalten
   public Object austragen(Object element); } // entfernt element aus dem Speicher

Schreiben Sie nun eine Klasse UnsichererSpeicher mit Hilfe von Speicher, die dieselben zwei Methoden mit derselben Funktionalität enthält, die aber ungeprüfte Ausnahmen auslösen.


Aufgabe 3: Implementieren Sie die Klasse DreiKreise mit Hilfe der Klasse lehrbuch.Kreis:

public class DreiKreise { // Spezifikation
   public static void bemalen(); // bemalt die drei Kreise jeweils mit ROT, GRUEN und BLAU
   public static void verstecken(); // versteckt die drei Kreise
   public static void wiederherstellen(); } // stellt die drei Kreise wieder her

Der nötige Teil der Spezifikation von lehrbuch.Kreis ist:

public class Kreis { // Spezifikation
   public void bemalen(lehrbuch.Farbe); // bemalt den Kreis mit Farbe.ROT, GRUEN oder BLAU
   public void verstecken(); // versteckt den Kreis
   public static void wiederherstellen(); } // stellt den Kreis wieder her

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            Von einer Klasse kann ein Objekt nur dann erzeugt werden,
(     )     Falsch             wenn sie einen (impliziten oder expliziten) public-Konstruktor enthält.

Grund: 

(     )     Richtig            Ein aktueller Parameter (eines Methodenaufrufs) wird in Java
(     )     Falsch             immer in den formalen Parameter (der Methodendefinition) kopiert.

Grund: 

(     )     Richtig            Mit FlowLayout muss man die Größe des Oberflächenobjekte
(     )     Falsch             explizit bestimmen.

Grund: 

(     )     Richtig            Ein char-Wert kann immer implizit nach short konvertiert werden.
(     )     Falsch            

Grund: 

(     )     Richtig            Einer Java-Klasse kann Methoden und Variablen enthalten
(     )     Falsch             und nichts anderes.

Grund: 

(     )     Richtig            Durch das Drücken eines Knopfes können mehrere actionPerformed-Methoden
(     )     Falsch             ausgeführt werden.

Grund: 

(     )     Richtig            public int funktion(); darf nicht als eine Anweisung funktion();
(     )     Falsch             aufgerufen werden.

Grund: 

(     )     Richtig            Von einer anonymen Klasse kann nur ein Objekt erzeugt werden.
 (    )     Falsch

Grund: 


Aufgabe 5.: Zeichnen Sie die Datenstruktur (alle Objekte und alle Referenzen, die darauf zeigen) des folgenden Applets:

import java.awt.*; import java.awt.event.*;
public class ButtonLabel extends java.applet.Applet {
   private Label label = new Label("Label");
   public void init() {
     Button button = new Button("Button");
     add(label); add(button);
     button.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent event) {
             label.setText("Click"); } } ); } }

Kennzeichnen Sie die Referenzen, die durch eine add- oder set-Methode gesetzt werden, mit einem gestrichelten Pfeil.