Klausurdauer: 3 Stunden. Lesen Sie zuerst die Hinweise auf der Rückseite!

Ähnliche Dokumente
Aufgabe 1: Objektorientierte Grundkonzepte

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

12 Abstrakte Klassen, finale Klassen und Interfaces

Lesen Sie zuerst die Hinweise auf der Rückseite!

Programmiermethodik 1. Klausur

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

Einführung in die Programmierung

Klausur Software-Entwicklung März 01

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Einstieg in die Informatik mit Java

Probeklausur: Programmierung WS04/05

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Allgemeine Informatik II SS :30-13:30 Uhr

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Kapitel 12. Programmierkurs. Allgemeine Konzepte Byte-Streams versus Character-Streams

1 Abstrakte Klassen, finale Klassen und Interfaces

Probeklausur Informatik 2 Sommersemester 2013

Lesen Sie zuerst die Hinweise auf der Rückseite!

Programmieren in Java

Programmieren 2 Java Überblick

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

3 Objektorientierte Konzepte in Java

Fragenkatalog ESOP WS 16/17

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Aufgabe 1 (Programmanalyse, Punkte)

Informatik Abitur Bayern 2017 / II - Lösung

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Algorithmen und Datenstrukturen

Klausur "ADP" SS 2016

Kapitel 12: Induktive

Algorithmen und Datenstrukturen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

Klausur Programmieren 2 SS 2016

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Einführung in die Informatik 2

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

3 Objektorientierte Konzepte in Java

Die Klasse java.lang.object. Thorsten Treffer

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Klausur: Java (Liste P)

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Algorithmen und Datenstrukturen

Kapitel 6. Vererbung

Programmieren in Java

Scheinklausur zur Vorlesung Praktische Informatik I. 12. November Punkteübersicht

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

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Klausur "ADP" SS 2015

1.) Zahlensysteme (10 Punkte)

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

Programmieren I. Dateien: Allgemeines. Vorlesung 10. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

4. Vererbung Die Klasse Object. Die Klasse Object

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Einführung in die Informatik 1

13. Bäume: effektives Suchen und Sortieren

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

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

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Klausur Sommersemester 2012 Datenstrukturen und Algorithmen 24. September 2012

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Dateien. DVG Dateien 1

Javakurs für Anfänger

Vorlesung Objektorientierte Programmierung Klausur

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

Java Einführung Vererbung und Polymorphie. Kapitel 13

Programmieren in Java -Eingangstest-

public interface Stack<E> { public void push(e e); public E pop();

Kapitel 4: Klassen und Unterklassen

Einführung in die Programmierung

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Kapitel 6. Vererbung

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung

Institut für Informatik

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden. Name:

JAVA für Einsteiger. Streams und Dateien. eden market Autor: Norman Lahme

Programmieren in Java

Allgemeine Hinweise:

368 4 Algorithmen und Datenstrukturen

Transkript:

Fakultät für Mathematik und Informatik Lehrgebiet Programmiersysteme Prof. Dr. Friedrich Steimann FernUniversität in Hagen D-58084 Hagen (Name, Vorname) (Straße, Nr.) (PLZ) (Wohnort) (Land, falls außerhalb Deutschlands) Kurs 1618 SS 2006 Einführung in die objektorientierte Programmierung Klausur am 29.07.2006 Klausurdauer: 3 Stunden Lesen Sie zuerst die Hinweise auf der Rückseite! Matrikelnummer: Geburtsdatum:.. Klausurort:... Aufgabe 1 2 3 4 5 6 7 Summe habe bearbeitet maximal 17 18 20 10 15 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 Nachklausur findet am 23.09.2006 statt. Hagen, den im Auftrag 2006 FernUniversität in Hagen

Hinweise zur Bearbeitung 1. Prüfen Sie die Vollständigkeit Ihrer Unterlagen. Die Klausur umfasst: 1 Deckblatt, 7 Aufgaben auf Seite 1 bis Seite 10. Geben Sie diese Unterlagen zusammen mit Ihren Lösungen später bitte vollständig ab, einschließlich Aufgabenstellung. 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) auf eigenes Papier. Kreuzen Sie die bearbeiteten Aufgaben auf dem Deckblatt an. Schreiben Sie unbedingt auf jedes Blatt Ihrer Lösungen die Aufgabennummer, Ihren Namen und Ihre Matrikelnummer. 4. Es sind keine Hilfsmittel zugelassen. 5. Lesen Sie vor der Bearbeitung einer Aufgabe den gesamten Aufgabentext sorgfältig durch. 6. Achten Sie darauf, dass Sie bei Programmieraufgaben Ihre Lösungen sinnvoll kommentieren; es könnten Ihnen sonst Punkte abgezogen werden. 7. Es sind maximal 100 Punkte erreichbar. Wenn Sie mindestens 40 Punkte erreichen, haben Sie die Klausur mit Sicherheit bestanden. 8. Sie erhalten die korrigierte Klausur zurück zusammen mit einer Bescheinigung für das Finanzamt und ggf. dem Übungsschein. 9. Legen Sie jetzt noch Ihren Studentenausweis und einen amtlichen Lichtbildausweis bereit, dann kann die Arbeit beginnen. Viel Erfolg!

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 1 Aufgabe 1: Objektorientierte Grundkonzepte (17 Punkte) a) Erläutern Sie das Grundmodell der Objektorientierten Programmierung. (4 Punkte) b) Erläutern Sie die Begriffe Klassifikation, Klasse und Vererbung, sowie deren Zusammenhang. (4 Punkte) c) Erläutern Sie die Begriffe Abstraktion und Spezialisierung im Zusammenhang mit Klassenhierarchien. (3 Punkte) d) Legen Sie anhand von mindestens drei Charakteristika den Unterschied zwischen Wert und Objekt dar. (3 Punkte) e) Was versteht man unter Kapselung? (3 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 2 Aufgabe 2: Fortgeschrittene objektorientierte Konzepte (18 Punkte) a) Erklären Sie die Begriffe Typ und Typhierarchie. (4 Punkte) b) Erklären Sie das Substitutionsprinzip. (2 Punkte) c) Vergleichen Sie Subtyping mit Vererbung. (4 Punkte) d) Erklären Sie die Begriffe Polymorphismus und dynamische Bindung, sowie deren Zusammenhang. (4 Punkte) e) Erläutern Sie die Begriffe Kontra- und Kovarianz. (4 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 3 Aufgabe 3: Quickies in Java (20 Punkte) a) Der Einstiegspunkt in ein Java-Programm ist üblicherweise die folgende Methode: public static void main( String[] args ) Erklären Sie kurz die Bestandteile public, static und void der Methodensignatur. (3 Punkte) b) Erläutern Sie den Unterschied zwischen implements und extends in Java. (3 Punkte) c) Welche zwei grundlegend verschiedene Arten von Exceptions gibt es in Java? Diskutieren Sie für jede Art eine Ihnen bekannte Exception aus der Standardbibliothek und wie man diese Ausnahmen in einem Java-Programm behandelt. (4 Punkte) d) Kompiliert folgendes Programm? public interface SomeInterface { public class SomeClass implements SomeInterface { public class Main { public void donothing() { SomeInterface foo = new SomeClass(); SomeClass bar = foo; Begründen Sie ihre Antwort und korrigieren Sie gegebenenfalls das Programm. (2 Punkte) e) Was bedeutet das Schlüsselwort final und wo kann es überall vorkommen? (3 Punkte) f) Was bedeutet der Aufruf super(..) und wo kann er vorkommen? (2 Punkte) g) Was bedeutet der Modifier synchronized? (3 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 4 Aufgabe 4: Vererbung und Polymorphismus (10 Punkte) a) Gegeben sei die folgende Klasse Auto: public class Auto { protected double neuwagenpreis; protected int baujahr; protected String modell; public Auto(double neuwagenpreis, int baujahr, String modell) { this.neuwagenpreis = neuwagenpreis; this.baujahr = baujahr; this.modell = modell; public double getpreis() { return preis; Erweitern Sie diese Klasse so, dass eine neue Klasse GebrauchtAuto entsteht, die zusätzlich die bereits gefahrenen Kilometer speichert. Schreiben Sie den dazu notwendigen Konstruktor und überschreiben Sie die Methode double getpreis() so, dass nach jeweils 20000 gefahrenen Kilometern der Neuwagenpreis des Wagens um 10% sinkt. Beachten Sie, dass der Händler einen Mindestpreis von 2000 für jeden Gebrauchtwagen angesetzt hat. (6 Punkte) b) Gegeben sei nun die folgende main()-methode: public class AutoHaendler { public static void main ( String[] args ) { GebrauchtAuto auto1 = new GebrauchtAuto(20000, 2002, "Audi TT", 70000); System.out.println("Preis:"+ auto1.getpreis()); Auto auto2 = auto1; System.out.println("Preis:"+ auto2.getpreis()); Geben Sie an, welche Methoden-Implementierungen bei auto1.getpreis() und bei auto2.getpreis() aufgerufen werden und wie die Ausgabe aussieht. Begründen Sie Ihre Antwort. (4 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 5 Aufgabe 5: Rekursive Programmierung (15 Punkte) a) Der binäre Baum ist eine besondere Baumstruktur. Er definiert sich dadurch, dass jeder Knoten (= Element des Baums) maximal zwei Nachfolger haben darf. Beim binären Baum unterscheidet man zwischen der Wurzel, den inneren und äußeren Knoten. Die Wurzel ist der Grundknoten des Baumes, da sie keinen Vorgänger besitzt. Wenn der Zeiger auf die Wurzel leer ist, ist der Baum leer. Äußere Knoten nennt man jene, welche keine Nachfolger haben. Diese Knoten befinden sich auf der untersten Ebene eines Baumes und die Referenzen auf den linken und rechten Nachfolgeknoten sind bei diesen Knoten leer. (10 Punkte) class Binaerbaum { protected Knoten wurzel=null; protected class Knoten { Element wert; Knoten links, rechts; Knoten (Element wert, Knoten links, Knoten rechts) { this.wert = wert; this.links = links; this.rechts = rechts; public String tostring() { return wert.getvalue(); public boolean isempty() { return (wurzel==null); class Element { private int value; Element(int value) { this.value = value; public int compareto(element e) { if ( e.getvalue() < this.value) { return 1; else if ( e.getvalue() > this.value) { return -1; else { return 0; public int getvalue() { return value; Implementieren Sie eine Methode public boolean insert(element e), die Elemente in den Baum einfügt. Eine Instanz e 1 der Klasse Element wird als neuer Knoten im linken Teilbaum eines bestehenden Knotens, welcher eine Instanz e 2 der Klasse Element beinhaltet, eingefügt, wenn e 1.getV alue() < e 2.getV alue(). Im Falle von e 1.getV alue() > e 2.getV alue() wird das Element e 1 im rechten Teilbaum eingefügt.

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 6 Herrscht Gleichheit, so soll die Funktion false zurückliefern. Als Grundlage benutzen Sie obigen Code. b) Ein binärer Baum kann auf verschiedene Arten durchlaufen werden, so dass jeder Knoten genau einmal besucht wird. Die wohl wichtigste Durchlaufart ist die sogenannte Inorder- Traversierung, welche folgender Definition folgt: Für jeden Knoten k: Besuche den linken Teilbaum des Knotens k. Besuche k. Besuche den rechten Teilbaum des Knotens k. Implementieren Sie auf Basis des obigen Codes eine Methode public String printinorder(), die die im Binärbaum gespeicherten Werte als String in einer Inorder-Reihenfolge zurückliefert. (5 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 7 Aufgabe 6: I/O mit Java (10 Punkte) Schreiben Sie ein Java-Programm, um zu bestimmen, ob zwei aufeinander folgende, per Tastatur eingegebene Zeilen Palindrome voneinander darstellen, d.h. dieselben Zeichen in umgekehrter Reihenfolge enthalten. Groß- und Kleinschreibung soll hierbei ignoriert werden. Nachdem das Ergebnis ausgegeben wurde, beendet sich das Programm. Bekannte Beispiele für Palindrome sind Otto oder Regal und Lager. Hinweis: Für diese Aufgabe stehen Ihnen insbesondere die im Anhang aufgeführten Klassen zur Verfügung. Natürlich können Sie auch andere Ihnen bekannte Klassen aus dem JDK benutzen.

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 8 Aufgabe 7: Sortieren mit Java (10 Punkte) Schreiben Sie ein Java-Programm, welches eine Datei einliest, die Zeilen in aufsteigender Reihenfolge sortiert und in eine neue Datei schreibt. Ein- und Ausgabedatei werden als Parameter an das Programm übergeben. Benutzen Sie eine Klasse Line, die das Verwalten von eingelesenen Zeilen übernimmt, d.h. eine Instanz dieser Klasse speichert eine Zeile der Eingabedatei. Die Klasse Line soll das Interface Comparable implementieren, also die Methode int compareto(object l) zur Verfügung stellen. Seien l 1 und l 2 Instanzen der Klasse Line, so muss die Methode int compareto(object l), aufgerufen durch l 1.compareT o(l 2 ), folgendes Verhalten zeigen. Groß- und Kleinschreibung soll hierbei ignoriert werden. a) Seien l 1 und l 2 gleichlang, dann ist l 1 größer als l 2, wenn das erste Zeichen von l 1, in dem sich l 1 von l 2 unterscheidet, weiter hinten im Alphabet zu finden ist. b) Seien l 1 und l 2 gleichlang, dann ist l 1 kleiner als l 2, wenn das erste Zeichen von l 1, in dem sich l 1 von l 2 unterscheidet, weiter vorne im Alphabet zu finden ist. c) Seien l 1 und l 2 gleichlang, dann ist l 1 gleich l 2, wenn sich l 1 und l 2 nicht voneinander unterscheiden. d) Sei l 1 länger als l 2, dann ist l 1 größer als l 2, wenn das erste Zeichen von l 1, in dem sich l 1 von l 2 unterscheidet, weiter hinten im Alphabet zu finden ist oder l 2 vollständig als Präfix in l 1 enthalten ist. Andernfalls ist l 1 kleiner als l 2. e) Sei l 1 kürzer als l 2, dann ist l 1 größer als l 2, wenn das erste Zeichen von l 1, in dem sich l 1 von l 2 unterscheidet, weiter hinten im Alphabet zu finden ist. Andernfalls ist l 1 kleiner als l 2. Beispielsweise gilt Abc < abd, Aaa < aaaa oder aaaabaaa < aaaac. Hinweis: Für diese Aufgabe stehen Ihnen insbesondere die im Anhang aufgeführten Klassen zur Verfügung. Natürlich können Sie auch andere Ihnen bekannte Klassen aus dem JDK benutzen.

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 9 ANHANG package java.io; public class BufferedReader extends java.io.reader { //Erzeugt einen neuen BufferedReader, der seine Daten aus in bezieht. //Der Puffer hat eine voreingestellte Größe von 8.192 Zeichen. public BufferedReader(Reader in); //Schließt den Stream. //Exception: IOException public void close(); //Liest ein Zeichen und liefert es in der Unicode-Codierung zurück. //Der Rückgabewert ist -1, falls das Ende des Streams erreicht ist. //Exception: IOException public int read(); //Liest eine Textzeile aus dem Stream. Als Zeilenende-Sequenz //wird \r, \n (UNIX) oder "\r\n" (Windows) akzeptiert. public String readline(); package java.io; public class InputStreamReader extends java.io.reader { //Erzeugt einen neuen InputStreamReader, der die aus in gelesenen Bytes nach der //standardmäßigen Codierung der Plattform in Unicode-Zeichen konvertiert. public InputStreamReader(InputStream in); package java.lang; public interface Comparable { //Vergleicht dieses Objekt mit o. Der Rückgabewert ist kleiner als null, null oder größer als null, //je nachdem, ob dieses Objekt im Sinne der Ordnung kleiner, gleich oder größer als o ist. //Die Implementierung muss Asymmetrie und Transitivität sicherstellen, d. h.: //* Wenn a < b, dann nicht a > b //* Wenn a < b und b < c, dann auch a < c. public int compareto(object o); package java.lang; public final class String { //Liefert das Zeichen aus dem String, das an der Position index steht. // index wird hierbei von Null an gezählt. public char charat(int index); //Liefert die Länge des Strings. public int length(); //Liefert einen neuen String, in dem alle Großbuchstaben gemäß den //länderspezifischen Einstellungen in Kleinbuchstaben umgewandelt sind. public String tolowercase(); //Liefert einen neuen String, in dem alle Kleinbuchstaben gemäß den //länderspezifischen Einstellungen in Großbuchstaben umgewandelt sind. public String touppercase();

Klausur zum Kurs 1618 im Sommersemester 2006 am 29.07.2006 10 package java.io; public class File { // Erzeugt eine neue Instanz der Klasse File, mit der Datei, die unter pathname zu finden ist. public File(String pathname); package java.io; public class FileWriter { //Erzeugt eine neue Instanz der Klasse FileWriter, die in die über filename referenzierte Datei schreibt. // append gibt an, ob Daten an die bestehende Datei angehängt werden sollen //oder ob die Datei überschrieben wird FileWriter(String filename, boolean append); package java.io; public class FileReader { //Erzeugt eine neue Instanz der Klasse FileReader, die aus der in file referenzierten Datei liest. FileReader(File file); package java.util; public class Collections { //Sortiert die Einträge in der Liste list. Dazu wird die compareto-methode benutzt. public static void sort(list list);