Algorithmen und Datenstrukturen Sommersemester Übung Abgabe bis , 10:00 Uhr

Ähnliche Dokumente
Implementieren von Klassen

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

Algorithmen und Datenstrukturen

Vorkurs Informatik WiSe 15/16

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

Wissenschaftliches Rechnen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Einstieg in die Informatik mit Java

JAVA 05: Objektorientierte Konzepte

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

Algorithmen und Datenstrukturen 07

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Einstieg in die Informatik mit Java

Programmieren in Java

12 Abstrakte Klassen, finale Klassen und Interfaces

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2018/19. Vorbereitende Aufgaben

Javakurs für Anfänger

hue13 January 30, 2017

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Objektorientierung III

Universität Karlsruhe (TH)

Tafelübung 07 Algorithmen und Datenstrukturen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Fakultät IV Elektrotechnik/Informatik

Programmieren in Java -Eingangstest-

Prüfung Softwareentwicklung II (IB)

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Methoden und Wrapperklassen

Einstieg in die Informatik mit Java

Listing 1: Cowboy. Listing 2: Woody

Fragen zur OOP in Java

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

Javakurs für Anfänger

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

1 Klassen und Objekte

Programmieren in Java

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

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

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

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Typumwandlungen bei Referenztypen

1 Einleitung Generizität Syntax... 2

Einstieg in die Informatik mit Java

Programmierkurs Java

Erste Java-Programme (Java Wiederholung & Vererbung)

Vererbung und Polymorphie

Vorlesung Datenstrukturen

Einstieg in die Informatik mit Java

Informatik II Musterlösung

Javakurs für Anfänger

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09

Einführung in die Programmierung und Programmiersprachen (OOP)

Tag 8 Repetitorium Informatik (Java)

Probeklausur: Programmierung WS04/05

IT 2 - WS 2018/2019 Übungsblatt 4. die eine Liste von allen (dem Konstruktor übergebenen) Webseiten zurückgibt, die wort enthalten.

Die Klasse java.lang.object. Thorsten Treffer

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Objektorientierte Programmierung

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

Übungen zum Bioinformatik-Tutorium. Blatt 6

Programmierkurs C++ Polymorphismus

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

10.4 Konstante Objekte

Informatik I Eprog HS12

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Prüfung Softwareentwicklung II (IB)

1. Welche Programmzeilen definieren die main-methode richtig?

Allgemeine Informatik II SS :30-11:30 Uhr

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 19: Wrapper-Klassen

Grundelemente objektorientierter Sprachen (1)

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Einführung in die Programmierung

Anregungen zu Übung 2

Grundelemente objektorientierter Sprachen (1)

Einstieg in die Informatik mit Java

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

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

Vererbung, Polymorphie

Übung Programmierung WS 2007/08 - Blatt 6

Klausur Programmiertechnik (Probeklausur 1)

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Programmierung Nachklausurtutorium

C++ - Objektorientierte Programmierung Polymorphie

Institut fu r Informatik

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Tutoraufgabe 1 (Überladen von Methoden):

Programmierkurs C++ Abstrakte Klassen und Methoden

Institut für Informatik und Angewandte Kognitionswissenschaften

Aufgabenblatt 4. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

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

Propädeutikum Programmierung in der Bioinformatik

Transkript:

4. Übung Abgabe bis 24.05.2010, 10:00 Uhr Aufgabe 4.1: Referenzen Geben Sie Ihre Lösung als Referenzen.pdf ab. 16 Punkte a) Führen Sie einen Schreibtischlauf des folgenden Java-Programms durch. Es werden insgesamt drei Instanzen der Klasse Counter erzeugt. Notieren Sie in tabellarischer Form die Objekte (Instanzen), auf die die Referenzvariablen a - e sowie globalcounter an den durch <x> gekennzeichneten Stellen zeigen. Notieren Sie des Weiteren den Wert der Variable count der jeweiligen Objekte. Beispiel: Pos. a b c d e globalcoutner Obj0.count Obj1.count Obj2.count <1> Obj0 - - - - null 4 - - <2> Obj0 Obj1 - - - null 2 - -.............................. b) Notieren Sie die Konsolenausgabe des Programms. c) Begründen Sie in höchstens zwei kurzen Sätzen das Ergebnis des Vergleichs e == Counter.getGlobal() in Zeile 18. d) Erläutern Sie in höchstens drei kurzen Sätzen welche Bedingungen ein übergebenes Objekt erfüllen muß, damit die Methode equals der Klasse Counter true zurückgibt. 1 p u b l i c c l a s s App { 2 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 3 Counter a = new Counter ( 4 ) ; 4 / / <1> 5 Counter b = new Counter ( 2 ) ; 6 / / <2> 7 Counter c = a ; 8 Counter d = Counter. g e t G l o b a l ( ) ; 9 Counter e = b ; 10 / / <3> 11 b = n u l l ; 12 d. i n c ( ) ; 13 e. i n c ( ) ; 14 a. i n c ( ) ; 15 / / <4> 16 Counter. g e t G l o b a l ( ). i n c ( ) ; 17 / / <5> 18 System. o u t. p r i n t l n ( e == Counter. g e t G l o b a l ( ) ) ; 19 System. o u t. p r i n t l n ( e. e q u a l s ( Counter. g e t G l o b a l ( ) ) ) ; 20 } 21 } Fortsetzung auf Seite 2! - 1 -

1 c l a s s Counter { 2 p r i v a t e f i n a l s t a t i c i n t GLOBAL_COUNTER_START = 1 ; 3 4 p r i v a t e s t a t i c Counter g l o b a l C o u n t e r = n u l l ; 5 6 p r i v a t e i n t c o u n t ; 7 8 p u b l i c s t a t i c Counter g e t G l o b a l ( ) { 9 i f ( g l o b a l C o u n t e r == n u l l ) 10 g l o b a l C o u n t e r = new Counter (GLOBAL_COUNTER_START ) ; 11 return g l o b a l C o u n t e r ; 12 } 13 14 p u b l i c Counter ( i n t s t a r t ) { 15 t h i s. c o u n t = s t a r t ; 16 } 17 18 p u b l i c i n t g e t C o u n t ( ) { 19 return t h i s. c o u n t ; 20 } 21 22 p u b l i c void i n c ( ) { 23 ++ t h i s. c o u n t ; 24 } 25 26 p u b l i c boolean e q u a l s ( O b j e c t o b j ) { 27 i f ( o b j == n u l l ) { 28 return f a l s e ; 29 } e l s e i f ( o b j i n s t a n c e o f Counter ) { 30 return ( ( Counter ) o b j ). g e t C o u n t ( ) == g e t C o u n t ( ) ; 31 } e l s e { 32 return f a l s e ; 33 } 34 } 35 36 p u b l i c S t r i n g t o S t r i n g ( ) { 37 return S t r i n g. valueof ( t h i s. c o u n t ) ; 38 } 39 } Aufgabe 4.2: Überladen 8 Punkte In einer Java-Klasse können verschiedene Methoden mit gleichem Bezeichner enthalten sein. Es ist die folgende Methode gegeben: ( ) p u b l i c f l o a t maximum ( f l o a t a, f l o a t b ) Überprüfen Sie nun für die folgenden Methoden, ob es sich jeweils um eine zulässige Überladung der Methode ( ) handelt und begründen Sie Ihre Antwort jeweils kurz. Geben Sie Ihre Lösungen als Overloading.pdf ab. - 2 -

( a ) p u b l i c f l o a t maximum ( i n t x, i n t y ) ( b ) p u b l i c f l o a t maximum ( ) ( c ) p u b l i c char maximum ( f l o a t a, f l o a t b ) ( d ) p u b l i c f l o a t maximum ( f l o a t x, f l o a t y ) ( e ) f l o a t maximum ( f l o a t i, f l o a t j ) ( f ) p r i v a t e long maximum ( f l o a t i, f l o a t j ) ( g ) p u b l i c f l o a t maximum ( f l o a t i, f l o a t j, f l o a t k ) ( h ) p u b l i c f l o a t maximum ( char i, f l o a t j ) Aufgabe 4.3: Fahrzeuge 36 Punkte Laden Sie sich zunächst die Vorgabe Fahrzeuge.zip herunter und entpacken Sie diese. Übersetzen Sie nun die Datei VehicleTest.java. Das Testprogramm sollte fehlerfrei übersetzen, zeigt aber noch keine sinnvolle Ausgabe an. a) Implementieren Sie zunächst einen weiteren Konstruktor für die Klasse Vehicle. Dieser soll den Fahrzeugtyp (also beispielsweise UNKOWN, PKW, LKW) als int entgegennehmen und in das entsprechende Feld der Klasse schreiben. Eine Überprüfung des übergebenen Fahrzeugtyps ist nicht vorgesehen. b) Implementieren Sie anschließend für jede Unterklasse von Vehicle einen Konstruktor, der den Superkonstruktor der Klasse Vehicle aufruft und den entsprechenden Fahrzeugtyp übergibt. Verwenden Sie hierzu die Konstanten aus der Klasse Vehicle. Anschließend sollte VehicleTest folgende Ausgabe erzeugen: -- (1; --, --) -- (2; --, --) c) Überschreiben Sie die Methoden honk(), fuel() und typename() in den Klassen Pkw und Lkw. Das Hupen des Lkw s soll dem String moeoep entsprechen, das des Pkw s dem String tuuut. Der Lkw tankt Diesel während der Pkw Bleifrei tankt. Die Typ-Namen der beiden Fahrzeugklassen entsprechen genau den Namen der jeweiligen Konstanten in der Klasse Vehicle. Anschließend sollte java VehicleTest folgende Ausgabe erzeugen: PKW (1; tuuut, Bleifrei) LKW (2; moeoep, Diesel) d) Da wir in der Klasse Vehicle einen extra Konstruktor implementiert haben, der das Feld type initialisiert, benötigen wir den Standard-Konstruktor nicht mehr. Entfernen Sie diesen, Ihr Program sollte nach wie vor kompilieren! e) Die Klasse Vehicle selbst sollte nie direkt instanziiert werden. Um das auch in unserem Quelltext wiederzuspiegeln, ändern Sie den verbliebenen Konstruktor der Klasse Vehicle so ab, dass dieser nur noch von den Unterklassen der Klasse Vehicle aufgerufen werden kann. - 3 -

f) Da die Methoden fuel(), honk() und typename() nun in den Unterklassen von Vehicle implementiert wurden, können die entsprechenden Stubs (Stümpfe) dieser Methoden in der Klasse Vehicle in abstrakte Methoden umgewandelt werden. Führen Sie die nötigen Änderungen durch. Ändern Sie auch den Kopf der Klasse entsprechend, wenn nötig. g) Wir wollen die möglichen Fahrzeugtypen nun um den Monstertruck erweitern. Erstellen Sie eine Klasse Monstertruck die von Vehicle erbt. Legen Sie des weiteren eine neue Konstante für diesen Fahrzeugtyp namens MONSTERTRUCK an. Ein Aufruf der Methode tostring() der Klasse Monstertruck muss in folgender Ausgabe resultieren: MONSTERTRUCK (3; roar, Kerosin) Die tostring() Methoden dürfen hierzu nicht verändert oder überladen werden! h) Verschiedene Fahrzeuge können natürlich auch mit unterschiedlichen Komponenten geliefert werden. Zunächst müssen Schnittstellen zu möglichen Komponenten definiert werden. Erstellen Sie hierzu eine Schnittstelle namens NavigationSystem. Diese Schnittstelle erlaubt den Zugriff auf ein Navigationssystem. Die Schnittstelle NavigationSystem enthält die Methode void setdeparture(string location) und die Methode void setdestination(string destination). Definieren Sie diese Schnittstelle in der Datei NavigationSystem.java. i) Wir werden jetzt einen neuen Pkw einführen der über ein Navigationssystem verfügt. Dieser wird in der Klasse PkwWithNavi implementiert, die wiederum von Pkw erbt und die Schnittstelle NavigationSystem implementiert. Die Orte, die den Methoden setdeparture() und setdestination() übergeben werden, sollen in Feldern der Klasse PkwWithNavi gespeichert werden. Legen Sie hierzu die Felder departure und destination mit korrektem Typ an. Die Felder müssen so geschützt werden, dass nur Methoden der Klasse PkwWithNavi darauf zugreifen können. Implementieren Sie die genannten Erweiterungen in der Datei PkwWithNavi.java. j) Ändern Sie den Quelltext in der Datei VehicleTest.java so ab, dass zusätzlich ein PkwWithNavi und ein Monstertruck instanziiert werden. Setzen Sie anschließend eine Navigationsroute von Hamburg nach Berlin für die Instanz der Klasse PkwWithNavi. Abschließend sollen beide Objekte mittels tostring ausgegeben werden. k) Zu guter Letzt soll ein Aufruf der tostring() Methode eines Objekts der Instanz PkwWithNavi den momentanen Navigationsstatus ausgeben. Überschreiben Sie dazu die tostring() Methode in der Klasse PkwWithNavi, sodass diese folgenden Text zurückgibt (für die Route Hamburg - Berlin): PKW (1; tuuut, Bleifrei): Navigiere von Hamburg nach Berlin Nachdem Sie alles korrekt implementiert haben, sollte VehicleTest folgende Ausgabe erzeugen: - 4 -

PKW (1; tuuut, Bleifrei) LKW (2; moeoep, Diesel) PKW (1; tuuut, Bleifrei): Navigiere von Hamburg nach Berlin MONSTERTRUCK (3; roar, Kerosin) Geben Sie die Dateien Lkw.java, Monstertruck.java, NavigationSystem.java, Pkw.java, Vehicle.java, PkwWithNavi.java sowie VehicleTest.java als Ihre Lösung ab. - 5-60 Punkte