Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Ähnliche Dokumente
Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Kurs Einführung in die objektorientierte Programmierung (Kursdurchführung des Sommersemester 2016) Klausur am

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Musterlösung. Klausurort: Aufgabe Summe

Lesen Sie zuerst die Hinweise auf der Rückseite!

Javakurs für Anfänger

Klausur zur Einführung in die objektorientierte Programmierung mit Java

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Einstieg in die Informatik mit Java

Kapitel 6. Vererbung

Vorname: Nachname: Matrikelnummer: Klausur. Betriebssysteme

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Allgemeine Informatik II SS :30-13:30 Uhr

1 Polymorphie (Vielgestaltigkeit)

Java I Vorlesung Vererbung und Sichtbarkeit

3 Objektorientierte Konzepte in Java

Theorie zu Übung 8 Implementierung in Java

Kapitel 6. Vererbung

Allgemeine Hinweise:

Javakurs für Anfänger

Vererbung. Martin Wirsing. Ziele. Vererbung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

3 Objektorientierte Konzepte in Java

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierung II

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Klausur zum Kurs Betriebssysteme (1802) am 19. September 2009

Java Schulung (Java 2 Java Development Kit 5 / 6)

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

AuD-Tafelübung T-B5b

5.6 Vererbung. Vererbung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Java für Computerlinguisten

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Probeklausur: Programmierung WS04/05

Repetitorium Informatik (Java)

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Programmieren I. Kapitel 8. Vererbung

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in Java

Programmieren in Java

5. Abstrakte Klassen

Java - Programmierung - Objektorientierte Programmierung 1

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

5. Threads, Serverprozesse und Benachrichtigungen

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Informatik II Übung 6 Gruppe 7

Java: Vererbung. Teil 3: super()

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java Vererbung. Inhalt

Algorithmen und Datenstrukturen 07

Institut fu r Informatik

Java-Schulung Grundlagen

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Objektorientierte Programmierung

Programmieren in Java

Musterlösungen zur Klausur Informatik 3

Teil 2: OOP und JAVA (Vorlesung 11)

Parallele Prozesse. Prozeß wartet

Grundlagen der Objektorientierung

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Mobile und Verteilte Datenbanken

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Objektorientierte Programmierung. Kapitel 12: Interfaces

Innere Klassen in Java

Versuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.

Wiederholung zur Vorlesung Programmieren

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

Java Einführung Abstrakte Klassen und Interfaces

JAVA - Methoden

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Distributed Computing Group

2.2 Prozesse in Java

5. Tutorium zu Programmieren

Grafik-Programmierung

Klausur Softwaretechnologie WS 2014/15

Welche Informatik-Kenntnisse bringen Sie mit?

3. Anweisungen und Kontrollstrukturen

Tutorium zur Vorlesung Programmieren

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Einführung in die Programmierung

Javakurs für Anfänger

Hinweise zur Bearbeitung der Klausur zum Kurs Einführung in die imperative Programmierung

Programmieren I + II Regeln der Code-Formatierung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Datenbankanwendungsprogrammierung Crashkurs Java

Einführung in die Programmierung Blockkurs Java

Java Einführung Methoden in Klassen

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Transkript:

Kurs 1618 SS 2009 (Name, Vorname) (Straße, Nr.) (PLZ) (Wohnort) (Land, falls außerhalb Deutschlands) Einführung in die objektorientierte Programmierung Nachklausur am 6.2.2010 Dauer: 3 Std., 10 13 Uhr Lesen Sie zuerst die Hinweise auf der folgenden Seite! Matrikelnummer: Geburtsdatum:.. Klausurort: Aufgabe 1 2 3 4 5 6 7 8 9 10 Summe habe bearbeitet maximal 10 10 10 10 10 10 10 10 10 10 100 erreicht Korrektur Herzlichen Glückwunsch, Sie haben die Klausur bestanden. Note:... Sie haben die Klausur leider nicht bestanden. Für den nächsten Versuch wünschen wir Ihnen viel Erfolg. Die nächste Klausur findet im SS 2010 statt. Hagen, den 19.2.2010 Im Auftrag 2009 / 2010 FernUniversität in Hagen

Hinweise zur Bearbeitung 1. Prüfen Sie die Vollständigkeit Ihrer Unterlagen. Die Klausur umfasst auf insgesamt 18 Seiten : 1 Deckblatt Diese Hinweise zur Bearbeitung 10 Aufgaben auf Seite 3-16 Zwei zusätzliche Seiten für weitere Lösungen 2. Füllen Sie jetzt bitte zuerst das Deckblatt aus: Name, Vorname und Adresse, Matrikelnummer, Geburtsdatum und Klausurort. 3. Schreiben Sie Ihre Lösungen mit Kugelschreiber oder Füllfederhalter (kein Bleistift) direkt in den bei den jeweiligen Aufgaben gegebenen, umrahmten Leerraum. Benutzen Sie auf keinem Fall die Rückseiten der Aufgabenblätter. Versuchen Sie, mit dem vorhandenen Platz auszukommen, sie dürfen auch stichwortartig antworten. Sollten Sie wider Erwarten nicht mit dem vorgegebenen Platz auskommen, benutzen Sie bitte die beiden an dieser Klausur anhängenden Leerseiten. Es werden nur Aufgaben gewertet, die sich auf dem offiziellen Klausurpapier befinden. Eigenes Papier ist nur für Ihre persönlichen Notizen erlaubt. 4. Kreuzen Sie die bearbeiteten Aufgaben auf dem Deckblatt an. Schreiben Sie unbedingt auf jedes Blatt Ihrer Klausur Ihren Namen und Ihre Matrikelnummer, auf die Zusatzblätter auch die Nummer der Aufgabe. 5. Geben Sie die gesamte Klausur ab. Lösen Sie die Blätter nicht voneinander. 6. Es sind keine Hilfsmittel zugelassen. 7. Lesen Sie vor der Bearbeitung einer Aufgabe den gesamten Aufgabentext sorgfältig durch. 8. Es sind maximal 100 Punkte erreichbar. Wenn Sie mindestens 40 Punkte erreichen, haben Sie die Klausur bestanden. 9. Sie erhalten die korrigierte Klausur zurück zusammen mit einer Bescheinigung für das Finanzamt und ggf. dem Übungsschein. 10. Legen Sie jetzt noch Ihren Studentenausweis und einen amtlichen Lichtbildausweis bereit, dann kann die Arbeit beginnen. Viel Erfolg! Seite 2 von 18

Aufgabe 1: Begriffe der Objektorientierung Gegeben sei folgendes Programmfragment. public class MyClass { static String m(){ b = false; return ""; public int i = 1; { i = 2; static boolean b; class C extends MyClass{ C(int i){ Object a = m(); void n(){ m(); int x; Zählen Sie auf: Alle Konstanten: Alle lokale Variablen: Alle Objektattribute: Alle Klassenattribute: Alle Konstruktoren: Alle Objektmethoden: Alle Klassenmethoden: Alle Initialisierungsblöcke: Alle Überladungen: Jedes Subtyping: Seite 3 von 18

Aufgabe 2: Ausnahmebehandlung Es soll eine Klasse in Java implementiert werden, welche ein Warenlager repräsentiert. Um ein Entnehmen von Waren aus einem leeren Lager zu verhindern, soll gegebenenfalls eine Ausnahme in Form einer LagerIstLeerException ausgelöst werden, sobald dieser Fall eintritt. Ergänzen Sie das folgende Programm an den vorgesehenen Stellen um solch eine Ausnahmebehandlung. class Lager { int lagerstand = 0; public void lagere(int anzahl) { lagerstand = lagerstand + anzahl; public void entnehme(int anzahl) { (1 Punkt) (3 Punkte) lagerstand = lagerstand - anzahl; class LagerIstLeerException public class LagerTest { public static void main(string[] args) { Lager lager = new Lager(); lager.lagere(3); { (1 Punkt) lager.entnehme(2); (3 Punkte) Seite 4 von 18

Aufgabe 3: Abstrakte Klassen, Typen, Sichtbarkeit Zu folgendem Programmfragment meldet der Java-Compiler fünf Compilerfehler. abstract class SuperTest { protected Object o = f("42"); private String f(string s) { return s; abstract void a(); class Test extends SuperTest { String[] args = {"d", null; abstract void m(); void l() { main(args); Integer s = o; f("abc"); public static void main(string[] args) { System.out.println(this.args[0]); Finden und begründen Sie die 5 Compilerfehler anhand der Hinweise: Compilerfehler zu Sichtbarkeiten: Compilerfehler im Zusammenhang mit statischen Deklarationen: Compilerfehler im Zusammenhang mit dem Erben von abstrakten Klassen: Compilerfehler im Zusammenhang mit Subtyping: Compilerfehler im Zusammenhang mit der Deklaration abstrakter Methoden: (jeweils 2 Punkte) Seite 5 von 18

Aufgabe 4: Überschreiben und Überladen Gegeben sei folgendes Java-Programm: public class Zoohandlung { public static void main(string[] args) { Fisch fisch = new Goldfisch(); Vogel vogel1 = new Vogel(); Vogel vogel2 = new Rabe(); Amsel amsel = new Amsel(); Goldfisch goldfisch = new Goldfisch(); Super sup1 = new Super(); Super sup2 = new Sub(); sup2.m(vogel1, fisch); sup1.m(vogel2, fisch); sup1.m(vogel1, goldfisch); sup2.m(vogel1, goldfisch); sup1.m(amsel, vogel2); class Super { public void m(tier t1, Tier t2) { System.out.println("1"); public void m(tier t, Fisch f) { System.out.println("2"); class Sub extends Super { public void m(tier t1, Fisch t2) { System.out.println("3"); public void m(vogel v, Fisch f) { System.out.println("4"); class Tier { class Fisch extends Tier { class Goldfisch extends Fisch { class Vogel extends Tier { class Amsel extends Vogel { class Rabe extends Vogel { (Fortsetzung der Aufgabe auf folgender Seite) Seite 6 von 18

Begründen Sie, warum folgende Anweisungen zu welcher Ausgabe führen: (Fortsetzung von Aufgabe 4) sup2.m(vogel1, fisch); sup1.m(vogel2, fisch); sup1.m(vogel1, goldfisch); sup2.m(vogel1, goldfisch); sup1.m(amsel, vogel2); (jeweils 2 Punkte; ohne Begründung keine Punkte) Seite 7 von 18

Aufgabe 5: Generische Typen / Objektgeflechte Es soll in Java ein Stack implementiert werden, welcher die beiden Methoden push und pop bereitstellt. Folgendes Programm zeigt eine Verwendung des Stacks. public class StackUser { public static void main(string[] args){ Stack<String> mystack = new Stack<String>(); mystack.push("erstens"); mystack.push("zweitens"); System.out.println(myStack.pop() + " " + mystack.pop()); Die erwartete Ausgabe lautet: Zweitens Erstens Geben Sie eine Implementierung des Stacks an! Die unten stehende Klasse StackElement kann Ihnen dabei hilfreich sein. Sie brauchen keine Ausnahmebehandlungen, z.b. für den Fall, dass von einem leeren Stack ein Element entfernt werden soll, implementieren. public class StackElement<T> { private T element; private StackElement<T> next; public StackElement(StackElement<T> next, T element) { this.next = next; this.element = element; public T getelement() { return element; public StackElement<T> getnext() { return next; Seite 8 von 18

Aufgabe 6: this Für das Schlüsselwort this gibt es in Java mehrere Verwendungen. Was bezeichnet this im Rumpf einer Methode? Was bezeichnet this innerhalb eines Konstruktors? Warum führt die Verwendung von this innerhalb des Rumpfs einer statischen Methode (mit Ausnahme von Konstruktoren) zu einem Compilerfehler? (Fortsetzung der Aufgabe auf folgender Seite) Seite 9 von 18

Gegeben sei folgendes Codebeispiel: public class Test { private int bla; private String blubb; (Fortsetzung von Aufgabe 6) public Test(int bla, String blubb) { this.bla = bla; this.blubb = blubb; Warum sind hier die this notwendig? Gegeben sei das folgende weitere Beispiel: public class Test { private int x; public Test(int bla) { x = bla; dosomething(); public Test() { this(42); Wozu wird hier das this gebraucht? Seite 10 von 18

Aufgabe 7: AWT Schreiben Sie ein Programm, das ein Hauptfenster auf dem Bildschirm erzeugt. Dabei soll Ihr Programm aus der Klasse BaseFrame und der Klasse BaseFrameTest bestehen. Die Klasse BaseFrameTest enthält die main-methode. Sie erzeugt ein Fenster vom Typ BaseFrame und macht es sichtbar. Die Klasse BaseFrame ist Unterklasse von Frame. Sie definiert ein Fenster der Größe 300 x 400 an der Position 100, 100. Das Fenster kann durch Mausklick auf das Schließen-Symbol in der Titelleiste des Fensters geschlossen werden. Seite 11 von 18

Aufgabe 8: Polymorphie Gegeben ist folgendes Programmfragment: LinkedList ls = new LinkedList(); ls.addlast("letztes Element"); ((String) ls.getlast()).indexof("elem"); ls.addlast(new Object()); ((String) ls.getlast()).indexof("elem"); Welche Art von Polymorphie kommt hier zur Anwendung? An welcher Stelle im Programm tritt dabei was für eine Art von Fehler auf? (1 + 2 Punkte) Gegeben ist folgende, leichte Änderung des obigen Programmfragments: LinkedList<String> ls = new LinkedList<String>(); ls.addlast("letztes Element"); ls.getlast().indexof("elem"); ls.addlast(new Object()); ls.getlast().indexof("elem"); Welche Art der Polymorphie findet hier Anwendung? An welcher Stelle im Programm tritt was für eine Art von Fehler auf? (1 + 2 Punkte) (Fortsetzung der Aufgabe auf folgender Seite) Seite 12 von 18

(Fortsetzung von Aufgabe 8) Geben Sie ein Beispiel (Code oder in Worten) für beschränkt-parametrische Polymorphie! (3 Punkte) Welchen Begriff verwendet man oft anstatt von ad-hoc-polymorphie? (1 Punkt) Seite 13 von 18

Aufgabe 9: Objektorientierte Modellierung Der Typ Kreis mit einer Methode setzeradius und der Typ Quadrat mit der Methode setze- Kantenlaenge sollen beide Subtypen von GeometrischeFigur sein, welche die Methode druckefigur zur Verfügung stellen soll. Darüber hinaus soll Quadrat auch Subtyp des Typen EckigesDing sein, welcher die Methode eckenanzahl bereitstellt. Ebenso soll auch der Typ Bierkasten mit der Methode restmenge ein Subtyp von EckigesDing sein. Unter keinen Umständen soll aber ein Bierkasten eine GeometrischeFigur sein. Geben Sie eine mögliche Implementierung für obige Typen und Methoden an, so dass genau die geforderten Subtypbeziehungen erfüllt sind. Geben Sie auch alle nötigen Methodendeklarationen und - implementierungen mit an, wobei Sie die erforderlichen Methodenrümpfe nicht mit Implementierungen füllen müssen (ein { reicht). Ebenso brauchen Sie keine Attribute deklarieren. Seite 14 von 18

Aufgabe 10: Threads Gegeben ist der folgende Codeauschnitt: 01 public class Warum { 02 public static void main(string[] argv) { 03 Test t = new Test(); 04 t.start(); 05 t.dotry(); 06 t.stop(); 07 08 09 10 class Test extends Thread { 11 public void run() { 12 while (true) { 13 System.out.println("Hallo, ich komme."); 14 try { 15 Thread.sleep(500); 16 catch (InterruptedException e) { 17 e.printstacktrace(); 18 19 20 21 22 // Zum Beenden Enter-Taste druecken 23 void dotry() { 24 try { 25 System.in.read(); 26 catch (Exception e) { 27 e.printstacktrace(); 28 29 System.out.println("Ich gehe. Auf Wiedersehen!"); 30 31 (Fortsetzung der Aufgabe auf folgender Seite) Seite 15 von 18

(Fortsetzung von Aufgabe 10) Während der Programmausführung werden zwei Threads erstellt. Welches ist der zuerst erstellte Thread? Wo wird der zweite Thread gestartet? Wo wird der erste Thread zum ersten Mal gestoppt? Wo wird der zweite Thread gestoppt? Wann wird der erste Thread beendet? Seite 16 von 18

Zusätzlicher Platz für Ihre Lösungen Ergänzung zu Aufgabe Nr. Ergänzung zu Aufgabe Nr. Seite 17 von 18

Zusätzlicher Platz für Ihre Lösungen Ergänzung zu Aufgabe Nr. Ergänzung zu Aufgabe Nr. Seite 18 von 18