1 / 45

Einführung in die Programmierung Vererbung

Fakultät für Wirtschaftswissenschaften. Einführung in die Programmierung Vererbung. Uwe Lämmel. www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de. Inhalt. Vererbung Subtype Ersetzung Polymorphie. Das Beispiel DoME. "Database of Multimedia Entertainment"

naiya
Download Presentation

Einführung in die Programmierung Vererbung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Inhalt • Vererbung • Subtype • Ersetzung • Polymorphie

  3. 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. DoME-Objekte

  5. DoME-Klassen Obere Hälfte:Merkmale Unterer Teil:Methoden

  6. Klassendiagramm

  7. Das DoME-Objekt-Modell

  8. public class CD { privateString titel; privateString kuenstler; privateString kommentar; CD(String derTitel, String derKuenstler){ titel = derTitel; kuenstler = derKuenstler; kommentar = " "; } // Konstruktor void setKommentar(String kommentar) { ... } // setzeKommentar String getKommentar() { ... } void print(){ ... } ... } // CD CD Quelltext

  9. DVD Quelltext public class DVD { privateString titel; private String regisseur; privateString kommentar; DVD(String derTitel, String derRegisseur { titel = derTitel; regisseur = derRegisseur; kommentar = " "; } // Konstruktor void setKommentar(String kommentar) { ... } String getKommentar( ) { ... } void print( ) { ... } ... } // DVD

  10. class Database { private ArrayList<CD> cds; private ArrayList<DVD> dvds; ... public void list() { LineIO io = new LineIO(); for(CD cd : cds) { cd.print(); io.writeln(); // empty line between items }// for cd for(DVD dvd : dvds) { dvd.print(); io.writeln(); // empty line between items } // for dvd } // list } // Database Datenbank-Quelltext

  11. 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

  13. 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 in Java keine Änderung classMedium{ ... } Änderung classDVDextendsMedium{ ... } class CD extendsMedium { ... }

  15. Oberklasse classMedium { privateStringtitel; privateint spielzeit; privateboolean habIch; privateString kommentar; //Konstruktoren und Methoden folgen … }// Medium

  16. Unterklassen class CD extends Medium { privateString kuenstler; privateint titelanzahl; // Konstruktoren und Methoden folgen ... } // CD class DVD extends Medium { privateString regisseur; // Konstruktoren und Methoden folgen ... } // DVD

  17. class Medium { privateString titel; privateint spielzeit; privateboolean habIch; privateString 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 und Konstruktoren class CD extendsMedium { privateStringkuenstler; privateint titelanzahl; /** * Erzeugen einer CD */ public CD(StringderTitel, StringderKuenstler, intanzTitel, intzeit) { super(derTitel, zeit); kuenstler = derKuenstler; titelanzahl = anzTitel; }// Konstructor // methods omitted }// CD

  19. 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. Weitere Medien

  21. mehr Hierarchie

  22. class Databank { private ArrayList<Medium>medien; /** * Erzeuge eine leere Datenbank */ public Databank() { medien = new ArrayList<Medium>(); } // Konstruktor /** * Hinzufügen eines Mediums */ public voiderfasseMedium(MediumdasMedium){ medien.add(dasMedium); }// Database ... } // Database neuer Datenbank-Code

  23. neuer Datenbank-Code /** * Ausgabe alle CDs und DVDs * auf die Konsole */ public voidauflisten(){ LineIO io = new LineIO(); for(Medium medium : medien) { medium.print(); io.writeln(); }//for }//auflisten

  24. Subklassen und Subtyp • Klassen (Bauplan-) definieren Typen • Subklassen definieren Subtypen. • Objekte der Subklassen benutzbar,wann immer ein Objekt der Oberklasse erforderlich (substitution)

  25. Subtypen und Parameter-Übergabe class Database { publicvoid erfasseMedium(Medium medium) { ... } } //Database DVD dvd = new DVD(...); CD cd = new CD(...); database. erfasseMedium(dvd); database. erfasseMedium(cd); Subklassen-Objekte als Superklassen-Parameter

  26. Klassendiagramm

  27. Objekt – Diagramm

  28. Polymorphe Variablen Objekt-Variablen in Java sind polymorph: • können Objekte verschiedener Typen speichern: • deklarierten Typ • beliebiger Subtyp

  29. Subtypen und Zuweisung Subklasse Objekt kann einer Superklassen-Variable zugewiesen werden Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle();

  30. 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. Die Klasse Objekt Alle Klassen erben von Object

  32. Klassendiagramm

  33. 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! Was wir wollen: Wir bekommen: Titel: Rites I (49 min)* Das Beste auf dem Saxophon Titel: Hair (119 min) Das Musical!

  34. Problem • print-Methode der Klasse Mediumlistet nur gemeinsame Merkmale. • Vererbung nur von oben nach unten • Subklasse erbt Oberklassen-Merkmale. • Oberklasse kennt nicht die Subklassen-Merkmale

  35. Lösung: Überschreiben • print in allen Klassen • jede Unterklasse mit eigener print Version: • print in Unterklasse überschreibt print der Oberklasse (Overriding) print print print

  36. Ü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. Methoden-Aufruf Weder Vererbung noch Polymorphie

  38. Methoden-Aufruf Vererbung aber kein Überschreiben

  39. 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. Beispiel publicclass Person { private String name; public Person(String name) { this.name = name;} public String getName( ) { return name; } } //Person publicclass Deutscher extends Person { public Deutscher(String name) { super(name); } public String getGruss() { return"Guten Tag"; } } //Deutscher

  41. Person name getNname() Deutscher Franzose getGruss() getGruss() Bayer lieblingsbier getGruss() setLieblingsbier() UML-Diagramm

  42. Person name getName() Deutscher getGruss() Bayer getGruss() lieblingsbier getName() getGruss() setLieblingsbier() Dynamisches Binden

  43. 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. Hierarchie in der Vererbung

  45. Ende

More Related