Aufgabe 1 Aufgabe 2

Werbung
Übungen zu „Objektorientierte Programmierung in Java“
PD Dr. Wolfgang Goerigk
Sommersemester 2009
Beispiele für Klausuraufgaben
Bitte beachten Sie, dass es sich bei den folgenden Aufgaben nur um Beispiele möglicher Klausuraufgaben
handelt, nicht um eine Beispielklausur.
Aufgabe 1
Als die drei wesentlichen Merkmale der objektorientierten Programmierung werden Kapselung, Vererbung
(Polymorphie) und Nachrichtenaustausch (message passing) bezeichnet. Charakterisieren Sie diese
Merkmale und geben Sie jeweils ein Beispiel:
1. Inwiefern kapseln Klassendefinitionen Daten und Funktionen? Welche Modifikatoren können für
Attribute und Methoden in Klassen verwendet werden, um die Sichtbarkeit zu erlauben oder
einzuschränken (Information Hiding)?
2. Erklären Sie, wie sich die Vererbung (in Java extends) zwischen Subklasse und Superklasse auf die
Struktur der Subklasse auswirkt. Was bedeutet es, dass die Subklasse auch Subtyp der Superklasse
ist?
3. Erklären Sie, wie Objekte (Instanzen von Klassen) Nachrichten austauschen. Was bezeichnet man
als Nachricht? Wie reagiert ein Objekt auf das Senden einer Nachricht?
Aufgabe 2
Betrachten Sie die folgenden drei Klassendiagramme bzw. die entsprechenden Java-Klassen- und
Schnittstellendefinitionen. Vererbungsbeziehungen (extends) sind durchgezogen,
Implementierungsbeziehungen (implements) sind gestrichelt gezeichnet.
1. Welche der drei Diagramme beschreiben gültige (erlaubte) Vererbungs- bzw.
Implementierungsbeziehungen in Java?
2. Falls Fehler vorhanden sind, markieren Sie diese in den Diagrammen deutlich. Beschreiben Sie für
jeden Fehler die Fehlerart
Aufgabe 3
Gegeben seien die folgenden drei Java-Klassendefinitionen:
class A {
int i = 1;
int m1() { return i; }
}
class B extends A {
int i = 2;
int m2() { return i; }
}
public class Test {
public static void main(String[] args) {
A x = new B();
System.out.println(x.m1());
System.out.println(x.m2());
}
}
1. Erläutern Sie im Detail die Zeile “A x = new B();“
a.
b.
c.
d.
Was ist x?
Welchen Typ hat x?
Welchen Wert erhält x?
Ist die Initialisierung von x mit dem Wert von new B() erlaubt? Begründen Sie Ihre Antwort.
2. Welche Instanzvariablen und Methoden hat die Klasse A? Welche die Klasse B?
3. Ist der Aufruf x.m2() in der dritten Zeile der main-Methode erlaubt? Begründen Sie Ihre Antwort.
Aufgabe 4
Gegeben sei folgende Problemstellung:
Sie entwickeln eine Verwaltungssoftware für einen Waschsalon und wollen zunächst die objektorientierte Modellierung durchführen. Folgende Informationen liegen Ihnen vor:
Ein Waschsalon verfügt über verschiedene Geräte, darunter Waschmaschinen und Trockner. Die
Geräte haben jeweils einen Betriebszustand, verfügen über mehrere Programme und können die
Restlaufzeit angeben.
Waschmaschinen haben einen Wasch- und Weichspülmittelbehälter, dessen Füllstand ausgelesen
werden kann. Trockner haben eine Knitterschutzfunktion, die aktiviert und deaktiviert werden
kann.
Unter den Kunden des Waschsalons gibt es Abonnenten, deren Wasch- und Trockenvorgänge über
ein Abonnement abgebucht werden. Die Abonnenten verfügen über eine Kundenkarte, mit der sie
die Geräte steuern können.
Entwerfen Sie in Java geeignete Klassen bzw. Schnittstellen für die obige Aufgabe. Die Klassen sollen
entsprechende Attribute und Methoden enthalten.
Hinweise:
•
•
Sie sollen keine Anwendung programmieren; es reicht, die aus der obigen Beschreibung
hervorgehenden fachlichen Klassen und identifizieren und zu definieren und für die Methoden
einen Kommentar zu schreiben, was sie tun oder liefern sollen.
Verwenden Sie in T ein Attribut des Typs java.util.Vector <T1>, falls Instanzen der Klasse T zu
mehreren Instanzen der Klasse T1 in Beziehung stehen (Beispiel: Ein Waschsalon (T) verfügt über
mehrere Geräte (T1)).
Aufgabe 5
Gegeben seien die folgenden vier Klassendefinitionen:
class A {
public void sayA() { System.out.println(“A“); }
}
class B {
public void sayB() { System.out.println(“B“); }
}
class C {
public void sayC() { System.out.println(“C“); }
}
public class D {
public static void wasBinIch (ABoderC x) {
x.wasBinIch();
}
}
Ergänzen Sie das Programm um eine Schnittstelle ABoderC und die nötigen weiteren Methoden, so dass
jedes x auf die Nachricht wasBinIch() im Rumpf der Methode wasBinIch der Klasse D mit seinem
richtigen Klassennamen antwortet, also As mit “A“, Bs mit “B“ und Cs mit “C“.
Aufgabe 6
Gegeben seien folgende Ausschnitte aus zwei Java-Dateien B.java (links) und A.java (rechts):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package usedemo;
import demo.A;
public class B extends A {
private int att1 = 5;
public void hello() {
System.out.println("B");
System.out.println(att1);
System.out.println(att2);
System.out.println(att3);
System.out.println(att4);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package demo;
public class A {
private
protected
public
int
int
int
int
att1
att2
att3
att4
=
=
=
=
1;
2;
3;
4;
public void hello(){
System.out.println("A");
System.out.println(att1);
System.out.println(att2);
System.out.println(att3);
System.out.println(att4);
}
}
Betrachten Sie nun bitte folgendes Java-„Hauptprogramm“ Example.java:
import demo.*;
import usedemo.*;
public class Example {
public static void main(String[] args) {
new A().hello();
new B().hello();
}
}
1. Beim Übersetzen wird der Compiler zunächst einen oder mehrere Fehler anzeigen. Wo? Geben Sie
Dateinamen und Zeilennummer und ein Begründung an.
2. Gehen Sie nun davon aus, dass alle fehlerhaften Zeilen auskommentiert sind, und geben Sie die
Ausgabe des Programms, d.h. der Methode main an.
Herunterladen