Ü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.