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

Ähnliche Dokumente
Algorithmen und Datenstrukturen

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

FAKULTÄT FÜR INFORMATIK

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Java Vererbung. Inhalt

Teil 2: OOP und JAVA (Vorlesung 11)

Kapitel 6. Vererbung

Statische Methoden, Vererbung, Benutzereingabe

Einstieg in die Informatik mit Java

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

Kapitel 6. Vererbung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 6. Vererbung

1 Abstrakte Klassen, finale Klassen und Interfaces

Probeklausur: Programmierung WS04/05

Vererbung und Polymorphie

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

Repetitorium Informatik (Java)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Javakurs für Anfänger

Arten von Klassen-Beziehungen

Vererbung & Schnittstellen in C#

Einstieg in die Informatik mit Java

Javakurs für Anfänger

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

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung

Java I Vorlesung Vererbung und Sichtbarkeit

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

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

Einstieg in die Informatik mit Java

1 Polymorphie (Vielgestaltigkeit)

III. Objektorientierte Programmierung. Aufruf einer Methode. Definition einer Methode. Bezug zur aufrufenden Instanz. Instanzen einer Klasse

Arten von Klassen-Beziehungen

Einstieg in die Informatik mit Java

Kapitel 4: Klassen und Unterklassen

Wird in Java zwischen Gross- und Kleinschreibung unterschieden?

Einstieg in die Informatik mit Java

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

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Typumwandlungen bei Referenztypen

Algorithmen und Datenstrukturen 07

Programmiertechnik Klassenmethoden

Einführung in die Programmierung für NF. Vererbung

Probeklausur: Programmierung WS04/05

Java: Vererbung. Teil 3: super()

Programmierkurs C++ Abstrakte Klassen und Methoden

Institut fu r Informatik

Einführung in die Programmierung

PIWIN 1 Übung Blatt 5

Listing 1: Cowboy. Listing 2: Woody

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

6 Speicherorganisation

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

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Beispiel für überladene Methode

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

JAVA - Methoden

Vererbung. Martin Wirsing. Ziele. Vererbung

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

Algorithmen und Programmierung II

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmieren in Java

Tutoraufgabe 1 (Programmanalyse):

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

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Java Einführung Klassendefinitionen

6. Globalübung (zu Übungsblatt 8)

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

Programmieren I. Überblick Objektorientierung Heusch 12 Ratz 7. Institut für Angewandte Informatik

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

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

Java Kurs für Anfänger Einheit 5 Methoden

Dr. Monika Meiler. Inhalt

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Repetitorium Informatik (Java)

Java : Fehlerbehandlung.

Institut fu r Informatik

Java - Überladen von Methoden und Konstruktoren

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

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Musterlösung Stand: 5. Februar 2009

Einführung in die Informatik

Objektorientierung II

13. Tutorium zu Programmieren

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

Vererbung und Traits

Programmieren 2 Java Überblick

2.4.3 Polymorphie (Wiederholung von Alp2)

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Übungsblatt 7. Was ist die Ausgabe de facto? Entspricht die Ausgabe Ihren Erwartungen?

Einführung in die Programmierung Blockkurs Java

JAVA für Nichtinformatiker - Probeklausur -

Tag 4 Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen 06

3 Objektorientierte Konzepte in Java

Programmierkurs Java

Transkript:

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de) http://db.in.tum.de/teaching/ss16/ei2/ Lösungen zu Blatt 3 Aufgabe 1: Overloading Welche der folgenden Methoden-Überladungen sind erlaubt und welche nicht? Überprüfen Sie Ihre Antworten indem Sie die Beispiele in Java programmieren. Lösung 1 Das Laufzeitsystem muss herausfinden, welche der beiden überladenen Methoden es aufrufen muss, wenn diese im laufenden Programm verwendet werden. Damit dies möglich ist, müssen sich diese entweder in der Anzahl der Parameter oder in den Parametertypen unterscheiden. a) Nicht erlaubt: Beide Methoden haben genau einen Parameter vom Typ double und sind damit nicht unterscheidbar. +accelerate(mph : double) b) Erlaubt: Hier gibt es keinen Konflikt, da die Methoden in verschiedenen Klassen definiert sind. Metric Imperial +accelerate(mph : double) c) Erlaubt: Die verschiedene Parametertypen erlauben dem Laufzeitsystem die Unterscheidung. +accelerate(seconds : int) d) Nicht erlaubt: Der Typ des Rückgabewertes wird nicht zur Unterscheidung herangezogen. +accelerate(seconds : int) +accelerate(seconds : int) : double e) Nicht erlaubt: Klassenmethoden werden in diesem Fall wie Objektmethoden behandelt. 1

+tostring() : String +tostring() : String 1 f) Erlaubt: Die verschiedene Anzahl Parameter ermöglicht die Unterscheidung. +accelerate(mph : double, slope : double) g) Nicht erlaubt: Die generische Typinformation wird bei der Kompilierung entfernt und steht zur Laufzeit nicht mehr zu Verfügung. Beide Methoden haben dadurch genau einen Parameter vom Typ Set<Object> sind damit nicht mehr unterscheidbar. +load(passengers : Set<Passenger>) +load(luggage : Set<Suitcase>) Aufgabe 2: Dynamisches Binden Überlegen Sie sich welche Methoden aufgerufen werden, wenn man die Klasse DynamicDispatch ausführt. Überprüfen Sie anschließend Ihre Vermutung, indem Sie das Programm tatsächlich ausführen. 1 class DynamicDispatch { 2 public static void main( String [ ] args ) { 3 A a = new A() ; 4 B b = new B() ; 5 C c = new C() ; 6 D d = new D() ; 7 8 A[] array = {a, b, c, d}; 9 for (A element : array ) { 10 System. out. println ("x() : ") ; 11 element.x() ; 12 System. out. println ("\ny() : ") ; 13 element.y() ; 14 System. out. println ("\nz () : ") ; 15 element. z() ; 16 System. out. println ("\n=====\n") ; 17 } 18 } 19 } 20 21 class A { 22 public void x() { 1 Unterstrichen bedeutet hier Klassenmethode. 2

23 System. out. println (" >Ax ( ) " ) ; 24 z(); 25 } 26 27 public void y() { 28 System. out. println (" >Ay ( ) " ) ; 29 this.z(); 30 } 31 32 public void z() { 33 System. out. println (" >A z ( ) " ) ; 34 } 35 } 36 37 class B extends A { 38 public void y() { 39 System. out. println (" >By ( ) " ) ; 40 x(); 41 } 42 43 public void z() { 44 System. out. println (" >B z ( ) " ) ; 45 } 46 } 47 48 class C extends B { 49 public void x() { 50 System. out. println (" >Cx ( ) " ) ; 51 z(); 52 } 53 } 54 55 class D extends A { 56 public void x() { 57 System. out. println (" >Dx ( ) " ) ; 58 super.x(); 59 } 60 61 public void z() { 62 System. out. println (" >D z ( ) " ) ; 63 } 64 } Lösung 2 Das Konzept der Vererbung beinhaltet in Java, dass eine Variable von einem bestimmten Klassentyp auch Objekte von deren Untertklassen referenzieren kann. Ruft man nun eine Methode auf dem durch die Variable referenzierten Objekt auf, gibt es zwei Möglichkeiten: 3

Führe die Methode der Oberklasse aus Führe die überschriebene Methode einer der Unterklassen aus Von dynamischer Bindung spricht man, wenn in solchen Fällen immer die speziellste Variante der Methode aufgerufen wird, d.h. bei einem Objekt der Unterklasse würde, wenn diese existiert, die überschriebene Methode dieser Unterklasse aufgerufen werden. Wird stattdessen immer die Methode der Oberklasse genutzt, so spricht man von statischer Bindung. Bei Java hat man dabei keine Wahl: Methoden werden immer dynamisch gebunden. Die dynamische Bindung ist von enormer Bedeutung für die objektorientierte Programmierung, da die Flexibilität der Vererbung nur durch dynamische Bindung zum Tragen kommt. Ohne dynamische Bindung könnten Unterklassen das Verhalten der Oberklasse nicht anpassen, sondern nur um neue Methoden erweitern. Zurück zur eigentlichen Aufgabe: Die Ausgabe des Programms verdeutlicht, in welcher Reihenfolge die Methoden aufgerufen werden. Aufgabe 3: Don t repeat yourself (DRY) Auf der Website 2 finden Sie die Klasse Warenhaus.java. Lösung 3 Redundant vorhandene Informationen (z. B. Code-Duplizierungen in Quellcode) sind schwierig zu pflegen, da die Konsistenz zwischen den einzelnen Duplikaten von Hand gewährleistet werden muss. Vergisst man bei Änderungen eine Stelle, kommt es zu Inkonsistenz und als Folge oft zu nur schwer nachvollziehbarem Fehlverhalten des Programms. In dem Programm aus diese Aufgabe ist dies die Preisberechnung mit der Mehrwertsteuer, die an vielen Stellen redundant vorkommt. Bei Systemen, die dem DRY-Prinzip treu bleiben, brauchen Änderungen hingegen nur an einer Stelle vorgenommen zu werden und es können dabei keine Inkonsistenzen entstehen. a) Nennen Sie mindestens zwei Gründe, warum die Modellierung nicht optimal ist beispielsweise, wenn sich der Mehrwertsteuersatz mal wieder ändern sollte. Die Mehrwertsteuer ist in den Klassen mehrfach fest eingetragen. Diese Redundanz kann zu Inkonsistenzen führen, da bei einer Erhöhung des Steuersatzes eine Stelle übersehen werden könnte. Der Steuersatz sollte stattdessen an einer einzigen Stelle definiert sein und von dort jeweils referenziert werden. Alle fünf Produkte haben eine unterschiedlich benannte Methode um ihren Preis festzustellen. Dies führt zu Mehraufwand bei der Verwendung der Klassen, da ein Klient erst herausfinden muss, wie die jeweilige Methode heißt. Die fünf Produktklassen haben keine gemeinsame Oberklasse, obwohl sie ähnliches Verhalten aufweisen. Eine gemeinsame Oberklasse würde es erlauben, Objekte der verschiedenen Klassen gleich zu behandeln beispielsweise könnten diese dann in Kollektionen zusammengefasst werden. b) Implementieren Sie den Aufzählungstyp Mehrwertsteuersatz, der zwei Werte für den normalen und den vergünstigten Mehrwertsteuersatz hat. 2 Hier: http://www3.in.tum.de/teaching/ss13/ei2/ 4

c) Ziehen Sie die Gemeinsamkeiten der Produkte in eine gemeinsame Oberklasse Produkt. Führen Sie eine Methode ein, die für ein Produkt angibt, ob die vergünstigte Mehrwertsteuer anwendbar ist. Verwenden Sie diese Methode bei der Preisberechnung. d) Führen Sie die Klasse Einkaufskorb ein, die eine Menge von Produkten verwaltet und deren Gesamtpreis bestimmen kann. Verwenden Sie diese Klasse in der main-methode des Warenhauses. 5