Informatik I Eprog HS12

Ähnliche Dokumente
Klausur Grundlagen der Programmierung

Javakurs für Anfänger

Programmierkurs Java

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmieren in Java

Test-Driven Design: Ein einfaches Beispiel

Einführung in die Informatik

Java Einführung Vererbung und Polymorphie. Kapitel 13

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

Objektorientierte Programmierung Studiengang Medieninformatik

Programmierkurs C++ Abstrakte Klassen und Methoden

Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Programmieren in Java

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Javakurs für Anfänger

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

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

3 Objektorientierte Konzepte in Java

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Einführung in die Programmierung

Vererbung, Polymorphie

3 Objektorientierte Konzepte in Java

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Software Engineering Klassendiagramme Einführung

Algorithmen und Datenstrukturen

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

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

Musterlösung Stand: 5. Februar 2009

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Programmieren in Java -Eingangstest-

Aufgabe 1 (Programmanalyse, Punkte)

Kapitel 6. Vererbung

Programmieren in Java

Objektorientierte Programmierung

Programmiertechnik Vererbung & Polymorphismus für Fortgeschrittene

Softwaretechnik WS 16/17. Übungsblatt 01

Informatik II Übung 6 Gruppe 7

Java für Bauingenieure

Vererbung und Traits

Sommersemester Implementierung I: Struktur

Test-Driven Design: Ein einfaches Beispiel

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Javakurs für Anfänger

Statische Methoden, Vererbung, Benutzereingabe

Java Einführung Abstrakte Klassen und Interfaces

Aufgabenblatt: OOP - Seite 1. (2.) Geometrie: Erstellen Sie eine Klasse CPyramid, die sich von der Klasse Square ableitet:

Informatik I EProg HS13

Java: Vererbung. Teil 3: super()

Überschreiben von Methoden

Klausur Software-Entwicklung September 00

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

Programmieren 2 Java Überblick

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

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

EPROG 2.Teilprüfung. Aufgabe 1:

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.

1 Abstrakte Klassen, finale Klassen und Interfaces

6. Globalübung (zu Übungsblatt 8)

Vorlesung Programmieren

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Probeklausur: Programmierung WS04/05

Einführung in die Programmiersprache Java II

Informatik I Eprog HS10

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Algorithmen und Datenstrukturen 07

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

Programmiertechnik Objektorientierung

Kapitel 6. Vererbung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Softwareentwicklung Lösungen zu Programmierung von Klassen mit BlueJ

Programmierung für Mathematik (HS13)

Kapitel 6. Vererbung

Einstieg in die Informatik mit Java

Java Einführung Klassendefinitionen

Programmieren in Java

Einführung in die Programmierung für NF MI. Übung 04

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

JAVA für Nichtinformatiker - Probeklausur -

Klassenvariablen, Klassenmethoden

Transkript:

software evolution & architecture lab Informatik I Eprog HS12 Übung 11 1 Aufgabe: Interfaces & Visitor-Pattern 1.1 Lernziele 1. Die Verwendung von Interfaces trainieren. 2. Das Visitor Design-Pattern kennenlernen. 1.2 Aufgabenstellung Die Instanzen der Klasse Person (siehe nächste Seite) können dazu verwendet werden, um Familien- Stammbäume in Java abzubilden. Zudem hat der Programmierer der Klasse mit der accept- Methode eine elegante Möglichkeit geschaffen, um nachträglich neue Funktionalität hinzuzufügen, ohne bestehenden Code anpassen zu müssen. Die nachfolgende Illustration zeigt exemplarisch einen Stammbaum einer Familie: Neue Funktionalität kann hinzugefügt werden, indem man Klassen schreibt, die das Interface IVisitor implementieren. Instanzen dieser Klassen können dann der accept-methode von Person-Objekten übergeben werden. 1

1 public class Person { 2 private int age; 3 private String name; 4 5 private Person mom; 6 private Person dad; 7 8 public Person(String name, Person mom, Person dad) { 9 this.name = name; 10 this.mom = mom; 11 this.dad = dad; 12 } 13 14 public int getage() { return age; } 15 16 public void setage(int age) { this.age = age; } 17 18 public String getname() { return name; } 19 20 public void accept(ivisitor visitor) { 21 visitor.visit(this); 22 if(mom!= null) { 23 mom.accept(visitor); 24 } 25 if(dad!= null) { 26 dad.accept(visitor); 27 } 28 } 29 } 1 public interface IVisitor { 2 public void visit(person p); 3 } Wichtig: Für die nachfolgenden beiden Aufgaben dürfen Sie weder die Klasse Person, noch das Interface IVisitor verändern! 1. Schreiben Sie eine Klasse NameCollectingVisitor, welche das IVisitor-Interface implementiert und es erlaubt, sämtliche Namen aller Personen in einem Stammbaum zurückzuliefern. Im Falle des obenstehenden Stammbaumes soll es also möglich sein, eine Instanz von NameCollectingVisitor der accept-methode der Person-Instanz mit dem Namen Hansi zu übergeben und anschliessend über die Methode getcollectednames einen String zu erhalten, der sämtliche Namen aller fünf Personen enthält, also z.b. "Hansi Anna Emma Anton Paul". 2. Schreiben Sie nun eine Klasse AverageAgeVisitor, analog zu jener aus der vorangehenden Aufgabe, die das Durchschnittsalter aller Personen im Stammbaum beim Aufruf der getaverageage-methode zurückliefert. 2

2 Aufgabe: Statischer und dynamischer Typ 2.1 Lernziele 1. Repetition statischer und dynamischer Typ 2.2 Aufgabenstellung Gegeben seien folgende Klassen: 1 public class Super { 2 public void printhello() { 3 System.out.println("Hallo Welt!"); 4 } 5 6 public void printsomething() { 7 System.out.println("Etwas."); 8 } 9 } 1 public class SubEnglish extends Super { 2 3 public void printhello() { 4 System.out.println("Hello World!"); 5 } 6 } Kreuzen Sie jeweils an, welches der folgenden Statements in einem TestDriver in der main-methode zulässig ist und schreiben Sie allfälligen Konsolen-Output des Statements daneben. 1 Super x = new Super(); 2 x.printhello(); Zulässig Unzulässig Output: 1 Super y = new SubEnglish(); 2 y.printsomething(); Zulässig Unzulässig Output: 1 SubEnglish z = new Super(); 2 z.printhello(); Zulässig Unzulässig Output: 3

3 Aufgabe: Rekursion 3.1 Lernziele 1. Formale Notation verstehen und erklären können. 2. Rekursive Methode in Java implementieren können. 3.2 Aufgabenstellung 1. Gegeben seien folgende Rekursionsformeln: fak x fib i x fak x 1, falls x > 1 1, falls x = 1 oder x = 0 nicht definiert, sonst fib i 1 + fib i 2, falls i > 1 1, falls i = 1 0, falls i = 0 nicht definiert, sonst (1) (2) 2. Was berechnen die obenstehenden Formeln? 3. Implementieren Sie die obenstehenden Formeln mittels einer rekursiven Methode. Für undefinierte Werte soll auf der Konsole eine Fehlermeldung ausgegeben werden. 4

4 Aufgabe: Vererbung 4.1 Lernziele 1. Sie können ein UML-Diagramm in Code umsetzen. 2. Sie verstehen das Prinzip von Vererbung und Polymorphismus. 4.2 Aufgabenstellung Gegeben sei folgendes UML-Klassendiagramm: Person - name: String - male: boolean - age: int + Person + printdescription: void Pensioner Adult + Pensioner + Adult Child - numberofteeth: int + Child + Juvenile Juvenile a) UML Notation Hinweise zur Notation im Klassendiagramm: Kursive Notation kennzeichnet abstrakte Klassen/Methoden (siehe Person). Pfeile mit weisser Spitze zeigen die Vererbungshierarchie auf. Child, Juvenile, Adult und Pensioner sind also Subklassen von Person. Im obersten Teilkästchen wird jeweils der Klassenname notiert. Anschliessend folgen die Attribute und zum Schluss die Methoden. Attribute werden gemäss der folgenden Notation illustriert: <+/-> <name> : <type> wobei ein + für den Visibilitymodifier public und ein - für private steht. Methoden werden wie folgt notiert: <+/-> <name> : <return-type> wobei + und - wieder für public, bzw. private stehen. 5

b) Implementierung 1. Implementieren Sie die Klassen Person, Child, Juvenile, Adult, und Pensioner gemäss den Vorgaben im Klassendiagramm. Fügen Sie wo nötig nicht-abstrakte accessor-methoden in der Klasse Person hinzu. Die Methode printdescription() soll eine kurze Beschreibung ausgeben: Ich heisse Hans Muster, bin männlich, 70 Jahre alt und Pensionär(in). 2. Überschreiben Sie in der Klasse Pensioner die setage(int age)-methode so, dass beim Versuch ein Alter <61 zu setzen eine Meldung auf die Konsole geschrieben wird. 3. Erstellen Sie in der main()-methode eines TestDrivers verschiedene Objekte der abgeleiteten Klassen und legen Sie diese in einem Array ab. Führen Sie anschliessend für alle darin gespeicherten Objekte in einer geeigneten Schleife die Methode printdescription() aus. 4. Fügen Sie der Klasse Child zusätzlich eine Instanzmethode hinzu, deren Signatur in keiner der anderen Klassen vorkommen soll (beispielsweise eine Methode play()). Benutzen Sie erneut die Objekte welche in der Testklasse aus 3 erzeugt wurden, um die neu hinzugefügten Methoden aufzurufen. Notieren Sie die entstehende(n) Fehlermeldunge(n) Wie erklären Sie sich diese? - Schreiben Sie Ihre Überlegungen nieder. 6