Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften www.wi.hs-wismar.de/~laemmel.

Ähnliche Präsentationen


Präsentation zum Thema: "Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften www.wi.hs-wismar.de/~laemmel."—  Präsentation transkript:

1 Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften

2 Vererbung Folie 2 Uwe Lämmel Inhalt Vererbung Subtype Ersetzung Polymorphie

3 Vererbung Folie 3 Uwe Lämmel Das Beispiel DoME "Database of Multimedia Entertainment" speichert Informationen über CDs und DVDs –CD: Titel, Künstler, Anzahl Titel, Spielzeit, hab-Ich, Kommentar –DVD: Titel, Regisseur, Spielzeit, hab-Ich, Kommentar ermöglicht: –Suche nach Informationen –Ausgabe von Informationen / Listen

4 Vererbung Folie 4 Uwe Lämmel DoME-Objekte

5 Vererbung Folie 5 Uwe Lämmel DoME-Klassen Obere Hälfte: Merkmale Unterer Teil: Methoden

6 Vererbung Folie 6 Uwe Lämmel Klassendiagramm

7 Vererbung Folie 7 Uwe Lämmel Das DoME-Objekt-Modell

8 Vererbung Folie 8 Uwe Lämmel CD Quelltext public class CD { private String titel; private String kuenstler; private String kommentar; CD( String derTitel, String derKuenstler){ titel = derTitel;kuenstler = derKuenstler;kommentar = " "; } // Konstruktor void setKommentar( String kommentar) {... } // setzeKommentar String getKommentar() {... } void print(){... }...} // CD

9 Vererbung Folie 9 Uwe Lämmel DVD Quelltext public class DVD { private String titel; private String regisseur; private String kommentar; DVD( String derTitel, String derRegisseur { titel = derTitel;regisseur = derRegisseur;kommentar = " "; } // Konstruktor void setKommentar(String kommentar) {... } String getKommentar( ) {... } void print( ) {... }...} // DVD

10 Vererbung Folie 10 Uwe Lämmel Datenbank- Quelltext class Database { private ArrayList cds ; private ArrayList dvds ;... public void list() { LineIO io = new LineIO(); for ( CD cd : cds ) { cd.print(); io.write ln(); // empty line between items } // for cd for ( DVD dvd : dvds ) { dvd.print(); io.write ln(); // empty line between items } // for dvd } // list } // Database

11 Vererbung Folie 11 Uwe Lämmel Kritik doppelter Quelltext –Klassen CD und DVD sind fast gleich –Wartung schwierig – Doppelarbeit – Gefahr von Fehlern in der Wartung Doppelter Code auch in der Datenbank-Klasse

12 Vererbung Folie 12 Uwe Lämmel Vererbung

13 Folie 13 Uwe Lämmel Vererbung Definieren einer Oberklasse (superclass) : Medium Definieren von Unterklassen (subclass) für CD und DVD Oberklasse verwaltet gemeinsame Merkmale Unterklasse "erbt" (inherit) Merkmale der Oberklasse Unterklassen fügen eigene Merkmale hinzu

14 Vererbung Folie 14 Uwe Lämmel Vererbung in Java class Medium{... } class CD extends Medium {... } class DVD extends Medium{... } keine Änderung Änderung

15 Vererbung Folie 15 Uwe Lämmel Oberklasse class Medium { private Stringtitel; private int spielzeit; private boolean habIch; private String kommentar; // Konstruktoren und Methoden folgen … } // Medium

16 Vererbung Folie 16 Uwe Lämmel Unterklassen class CD extends Medium { private String kuenstler; private int titelanzahl; // Konstruktoren und Methoden folgen... } // CD class DVD extends Medium { private String regisseur; // Konstruktoren und Methoden folgen... } // DVD

17 Vererbung Folie 17 Uwe Lämmel class Medium { private String titel; private int spielzeit; private boolean habIch; private String kommentar; /** * Initialisieren der Merkmale. */ public Medium(String derTitel, int zeit) { titel= derTitel; spielzeit= zeit; habIch= false; kommentar= ""; } // Konstruktor // Methoden … } // Medium Vererbung und Konstruktoren

18 Vererbung Folie 18 Uwe Lämmel Vererbung und Konstruktoren class CD extends Medium { private String kuenstler; private int titelanzahl; /** * Erzeugen einer CD */ public CD(String derTitel, String derKuenstler, int anzTitel, int zeit) { super(derTitel, zeit); kuenstler = derKuenstler; titelanzahl = anzTitel; } // Konstructor // methods omitted } // CD

19 Vererbung Folie 19 Uwe Lämmel Konstruktor der Oberklasse Unterklassen-Konstruktor muss 'super' aufrufen falls nicht, fügt Compiler super() ein: –funktioniert nur, falls Oberklasse Konstruktor ohne Parameter besitzt! super muss erste Anweisung im Konstruktor sein.

20 Vererbung Folie 20 Uwe Lämmel Weitere Medien

21 Vererbung Folie 21 Uwe Lämmel mehr Hierarchie

22 Vererbung Folie 22 Uwe Lämmel class Databa nk { private ArrayList medien ; /** * Erzeuge eine leere Datenbank */ public Databa nk () { medien = new ArrayList (); } // Konstruktor /** * Hinzufügen eines Mediums */ public void erfasseMedium ( Medium dasMedium ) { medien.add( dasMedium ); } // Database...} // Database neuer Datenbank-Code

23 Vererbung Folie 23 Uwe Lämmel /** * Ausgabe alle CDs u nd DVDs * auf die Konsole */public void auf list en () { LineIO io = new LineIO(); for ( Medium medium : medien ) { medium.print(); io.write ln(); } // for } // auflisten neuer Datenbank-Code

24 Vererbung Folie 24 Uwe Lämmel Subklassen und Subtyp Klassen (Bauplan-) definieren Typen Subklassen definieren Subtypen. Objekte der Subklassen benutzbar, wann immer ein Objekt der Oberklasse erforderlich ( substitution )

25 Vererbung Folie 25 Uwe Lämmel Subtypen und Parameter-Übergabe class Database { public void erfasseMedium(Medium medium) {... } } //Database DVD dvd = new DVD(...); CD cd = new CD(...); database. erfasseMedium(dvd); database. erfasseMedium(cd); Subklassen-Objekte als Superklassen-Parameter

26 Vererbung Folie 26 Uwe Lämmel Klassendiagramm

27 Vererbung Folie 27 Uwe Lämmel Objekt – Diagramm

28 Vererbung Folie 28 Uwe Lämmel Polymorphe Variablen Objekt-Variablen in Java sind polymorph: können Objekte verschiedener Typen speichern: –deklarierten Typ –beliebiger Subtyp

29 Vererbung Folie 29 Uwe Lämmel Subtypen und Zuweisung Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); Subklasse Objekt kann einer Superklassen-Variable zugewiesen werden

30 Vererbung Folie 30 Uwe Lämmel Casting (Typ-Angleichung) S.318 !! Subtyp kann Supertyp zugewiesen werden ABER: Supertyp kann NICHT Subtyp zugewiesen werden: Vechicle v; Car c = new Car(); v = c; // richtig; c = v; Compiler-Fehler! Casting = explizite Typumwandlung –ermöglicht Zuweisung an Subtyp. c = (Car) v; –Nur OK, falls v wirklich ein Auto! –Verantwortung liegt beim Programmierer

31 Vererbung Folie 31 Uwe Lämmel Die Klasse Objekt Alle Klassen erben von Object

32 Vererbung Folie 32 Uwe Lämmel Klassendiagramm

33 Vererbung Folie 33 Uwe Lämmel Probleme mit der Ausgabe CD: Rites I (49 min)* Jan Garbarek Anzahl Titel: 16 Das Beste auf dem Saxophon DVD: Hair (119 min) Milos Forman Das Musical! Titel: Rites I (49 min)* Das Beste auf dem Saxophon Titel: Hair (119 min) Das Musical! Was wir wollen: Wir bekommen:

34 Vererbung Folie 34 Uwe Lämmel Problem print-Methode der Klasse Medium listet nur gemeinsame Merkmale. Vererbung nur von oben nach unten –Subklasse erbt Oberklassen-Merkmale. –Oberklasse kennt nicht die Subklassen-Merkmale

35 Vererbung Folie 35 Uwe Lämmel Lösung: Überschreiben print in allen Klassen jede Unterklasse mit eigener print Version: print in Unterklasse überschreibt print der Oberklasse (Overriding) print

36 Vererbung Folie 36 Uwe Lämmel Überschreiben/Overriding Oberklasse und Unterklasse definieren Methoden mit derselben Signatur (Kopf) Jede Methode greift auf Merkmaler ihrer Klasse zu Methode in Oberklasse erfüllt statischen Typcheck Laufzeit: Unterklassen-Methode wird aktiviert (überschreibt Oberklassen-Version)

37 Vererbung Folie 37 Uwe Lämmel Methoden-Aufruf Weder Vererbung noch Polymorphie

38 Vererbung Folie 38 Uwe Lämmel Methoden-Aufruf Vererbung aber kein Überschreiben

39 Vererbung Folie 39 Uwe Lämmel Methoden-Aufruf Zugriff auf Variable in Variable gespeichertes Objekt finden Klasse des Objekts finden Klasse wird nach Methode durchsucht Falls NICHT gefunden: Oberklasse durchsuchen wiederholen bis Methode gefunden Überschreibende Methoden werden zuerst gefunden

40 Vererbung Folie 40 Uwe Lämmel Beispiel public class Person { private String name; public Person(String name) { this.name = name;} public String getName( ) { return name; } } //Person public class Deutscher extends Person { public Deutscher(String name) { super(name); } public String getGruss() { return "Guten Tag"; } } //Deutscher

41 Vererbung Folie 41 Uwe Lämmel UML-Diagramm Person name getNname() Franzose Bayer getGruss() setLieblingsbier() lieblingsbier Deutscher getGruss()

42 Vererbung Folie 42 Uwe Lämmel Dynamisches Binden Person name getName() Deutscher Bayer lieblingsbiergetName() getGruss() setLieblingsbier() getGruss()

43 Vererbung Folie 43 Uwe Lämmel Zusammenfassung Vererbung erlaubt Definition von Klassen als Erweiterung von Klassen Vererbung –vermeidet doppelten Code –ermöglicht Code-Wiederverwendung –vereinfacht den Quelltext –vereinfacht Wartung und Erweiterung Variablen können auch Subtypen-Objekte speichern Subtypen können überall dort eingesetzt werden, wo Supertyp erwartet (Substitution).

44 Vererbung Folie 44 Uwe Lämmel Hierarchie in der Vererbung

45 Vererbung Folie 45 Uwe Lämmel Ende


Herunterladen ppt "Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften www.wi.hs-wismar.de/~laemmel."

Ähnliche Präsentationen


Google-Anzeigen