Programmierung (Datum unbekannt)

Aufgabe 1 (5 Punkte)

Die folgenden Programmfragmente seien Bestandteile der main()-Methode einer Java-Applikation. Was wird jeweils ausgegeben?

(a) (3 Punkte)

int x = 4;
for (int i=1; i<x; i++)
  System.out.print(i + ": " + x%i + "-");
System.out.println(x + ": " + x%x);

(b) (2 Punkte)

int[] tmp = {4};
int x[][] = new int [2][];
x[0] = tmp;
System.out.println(x[0][0]);

Aufgabe 2 (8 Punkte)

Die Klasse Person enthält die folgenden vier privaten Attribute:

  • name vom Datentyp String
  • geschlecht vom Datentyp String
  • alter vom Datentyp int
  • einkommen vom Datentyp float

Ein Konstruktor Person(String a, String b, int c, float d) initialisiert die Datenelemente mit den Werten seiner Parameter. Eine protected Methode setEinkommen(float a) setzt das Einkommen auf einen neuen Wert.

Die Klasse Student sei Unterklasse von Person und enthalte ein Datenelement matrikelNummer vom Typ float.

Schreiben sie den Quellcode der Klasse student nieder. Dieser soll die Definition eines Initialisierungskonstruktors enthalten. Die Werte für die Initialisierung der Oberklassenelemente müssen dem Konstruktor übergeben werden können. Das Datenelement matrikelNummer soll im Konstruktor gesetzt werden.

Schreiben sie eine Methode setBetrag, die einen Parameter vom Typ float übergeben bekommt und das Datenelement einkommen setzt.

Aufgabe 3 (12 Punkte)

Analysieren sie den nachfolgenden Quelltext:

class Exc1 extends Exception {
  void println() { System.out.println("Exc1"); }
}
class Exc2 extends Exception {
  void println() { System.out.println("Exc2"); }
}
class Exc3 extends Exc1 {
  void println() { System.out.println("Exc3"); }
}

public class ExceptionTest { 
  public static int f(int x) throws Exc1, Exc2, Exc3 {
    if (x == 1) throw new Exc1();
    if (x == 2) throw new Exc2();
    if (x == 3) throw new Exc3();
    return -x;
  }
  
  public static void main(String[] args) {
    try {
      int i = Integer.parseInt(args[0]);
      int y = f(i);
      System.out.println(y);
    } catch (Exc1 exc1) {
      exc1.println();
    } catch (Exc2 exc2) {
      exc2.println();
      return;
    } finally {
      System.out.println("finally");
    }
    System.out.println("Ende");
  }
}

Welche Ausgaben erscheinen in welcher Reihenfolge auf dem Bildschirm, wenn ein Nutzer bei der Ausführung des Programms

  1. eine 1 übergibt? (3 Punkte)
  2. eine 2 übergibt? (3 Punkte)
  3. eine 3 übergibt? (3 Punkte)
  4. eine 4 übergibt? (3 Punkte)

Aufgabe 4 (5 Punkte)

Gegeben sei die Klasse Test:

public class Test {
  public int zahl;
  public Test(int z) { zahl = z; }
}

und die folgenden Deklarationen

int var1 = 15; 
Test var2 = new Test(15);
Test var3 = new Test(15);

Welche der folgenden Aussagen trifft zu?

  1. 'System.out.println(var2);‚ bewirkt die Ausgabe: „15“
  2. 'System.out.println(var2==var3);‚ bewirkt die Ausgabe: „true“
  3. 'System.out.println(var2.equals(var3));‚ bewirkt die Ausgabe: „false“
  4. 'System.out.println(var1==var3);‚ bewirkt einen Fehler beim Kompilieren.
  5. 'System.out.println( (var1+„“).equals(var3+„“) );‚ bewirkt einen Fehler beim Kompilieren.

Aufgabe 5 (8 Punkte)

Gegeben sei folgendes Fragment einer Java-Klasse:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyFrame extends Frame implements ActionListener { 
  public int i = 0;
  public Button button1 = new Button("Button1");
  public Button button2 = new Button("Button2");
  
  public MyFrame(String titel) {
    super(titel);
    this.add(button1);
  }
  
  public void actionPerformed(ActionEvent e) {
    if ( ... ) {
    
    }
  }
}

Ergänzen Sie das Fragment zu einer fehlerfreien Klasse. Beim Klick auf Button1 soll die Applikation beendet werden. Das Drücken von Button2 führt zur Erhöhung des Wertes von i um 1. Notieren sie den vollständigen Quelltext.

Aufgabe 6 (18 Punkte)

  1. Erklären sie den Unterschied zwischen Instanzenvariablen/Instanzenmethoden und Klassenvariablen/Klassenmethoden an Hand eines selbst gewählten Beispiels! Gehen sie auch auf die Deklaration von Klassenvariablen/Methoden ein! (Welches Schlüsselwort?) (4 Punkte)
  2. Erklären sie den Unterschied zwischen den Anweisungen i++ und ++i. (2 Punkte)
  3. Was versteht man im Allgemeinen unter einem Flag-Interface? (1 Punkt)
  4. Erklären sie Unterschiede zwischen einfachen und Referenzdatentypen (? Punkte)

Welche der folgenden Aussagen ist richtig?

  • Jede Klasse muss eine Methode mit dem Namen main() enthalten. (1 Punkt)
  • Bei der Deklaration „public class B extends A { … }“ werden Konstruktoren der Klasse A an die Klasse B vererbt. (1 Punkt)
  • Der Typ eoiner Variablen kann ein Interface sein. (1 Punkt)
  • Interfaces können instanziiert werden. (1 Punkt)
  • Abstrakte Klassen können nicht instanziiert werden. (1 Punkt)
  • Eine von RunTimeException abgeleitete Exception muss nicht abgefangen werden. (1 Punkt)
  • Konstruktoren dürfen überhaupt keine Rückgabetypen haben. (1 Punkt)
  • Zwei Methoden einer Klasse dürfen die gleiche Signatur haben, solange sie sich an Hand ihres Rückgabewertes unterscheiden lassen. (1 Punkt)

Aufgabe 7 (7 Punkte)

Schreiben sie den vollständigen Quellcode einer Methoden nieder. Wählen sie alle Bezeichner selbst. Eventuelle Exceptions brauchen nicht behandelt zu werden.

Die Methode bekommt als Parameter zwei int-Werte übergeben. Es wird zunächst ein int-Array erzeugt, dessen Länge durch den ersten Parameter bestimmt wird. Der erste Wert (Stelle 0) des Arrays wird mit dem zweiten Parameter initialisiert. Alle anderen Stellen i des Arrays werden mit (…) des Wertes der Vorgängerstelle (Stelle i – 1) initialisiert. Die Methode gibt dieses Array zurück.

Aufgabe 8 (7 Punkte)

(a) Was ist dynamische Objekterzeugung und wie wird sie durch Programmiersprachen unterstützt?

(b) Gegeben sei die folgende Klasse:

public class TestKlasse {
  private int z1;
  private int z2;
  
  private ReferenzKlasse obj;
}

Die Klasse Referenzklasse bietet eine öffentliche Instanzenmethode public ReferenzKlasse getDeepCopy(), die eine exakte Kopie des Objektes der Klasse ReferenzKlasse zurückliefert. Implementieren sie beispielhaft eine Klonierungsmethode für die Klasse TestKlasse.