Lösung der Klausur Pr11 im SS'00

Aufgabe 1

public class ISDNAnschluss {
	private Anschluss erste, leitung2;
	public ISDNAnschluss() {
		leitung1 = new Anschluss();
		leitung2 = new Anschluss();
	}
	public void anrufen() throws BelegtAusn {
		try {
			leitung1.anrufen();
		} catch (BelegtAusn a) {
			leitung2.anrufen(); // throws BelegtAusn
					}
	}
	public void auflegen() {
		if (leitung1.belegt())
			leitung1.auflegen();
		else
			leitung2.auflegen();
	}
	public boolean belegt() {
		return leitung1.belegt() && leitung2.belegt();
	}
	public int einheit() {
		return leitung1.einheit() + leitung2.einheit();
	}
}

Aufgabe 2

public class ISDNAnschlussTest {
	public static void main(String[] args) {
		System.out.println("Test ISDNAnschluss");
		ISDNAnschluss a = new ISDNAnschluss();
		ISDNAnschluss b = new ISDNAnschluss();
		test(a);
		test(b);
	}
	public static void test(ISDNAnschluss i) {
		try {
			boolean b = i.belegt();
			System.out.println("Nicht belegt: " + b);
			System.out.print("1. Anruf: ");
			i.anrufen();
			System.out.print("2. Anruf: ");
			i.anrufen();
			b = i.belegt();
			System.out.println("Belegt: " + b);
			System.out.print("Auflegen: ");
			i.auflegen();
			b = i.belegt();
			System.out.println("Nicht belegt: " + b);
			System.out.println("Belegt: " + b);
			i.anrufen();
		} catch (BelegtAusn a) {
			System.out.println("Erwartete BelegtAusn");
		}
	}
}

Aufgabe 3

Der Name der Referenz in der Klasse Button ist unbekannt, jedoch derselbe in den beiden Button-Objekten

Aufgabe 4

Grund: main ist static, wird ohne Objekt aufgerufen

Grund: Der implizite Konstruktor (ruft super auf) ist in Klassen ohne explizite Konstruktor vorhanden

Grund: z.B. gemischterEimer; oder main in einem dynamischen Datenbehälterklasse

Grund: Klasse extends Applet implements ActionPerformed

Grund: for (;;) ist keine Zählschleife, nur mit Auflagen

Grund: Objekte werden durch Methoden, Variablen durch Operatoren verändert

Grund: falls eine Referenz von außerhalb des Blocks auf sie zeigt

Grund: char i = 234; // char ist Ganzzahltyp in Java

Aufgabe 5

public class LogImpl implements Log {
	private boolean b;
	public LogImpl(final boolean b) {
		this.b = b;
	}
	public void konjunktion(final Log wert) {
		LogImpl z = (LogImpl)wert; // Konvertierung nötig, weil wert.b es nicht gibt (Log hat keine Komponente b)
		b &= z.b;
	}
	public void disjunktion(final Log wert) {
		b |= ((LogImpl)wert).b;
	}
	public void ausgeben() {
		System.out.println("Logischer Wert: " + b);
	}
}

Bewertungsmaßstäbe

gilt nur für grundsätzlich richtige Ansätze

Aufgabe 1

Aufgabe 2

Aufgabe 3

Aufgabe 4

Aufgabe 5