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

45
Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenscha ften www.wi.hs-wismar.de/ ~laemmel [email protected]

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

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

Vererbung Folie 1Uwe Lämmel

Einführung in die ProgrammierungVererbung

Uwe Lämmel

Fakultät für Wirtschaftswissenschaften

www.wi.hs-wismar.de/~laemmel

[email protected]

Page 2: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 2Uwe Lämmel

Inhalt

Vererbung Subtype Ersetzung Polymorphie

Page 3: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 3Uwe 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

Page 4: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 4Uwe Lämmel

DoME-Objekte

Page 5: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 5Uwe Lämmel

DoME-Klassen

Obere Hälfte:Merkmale

Unterer Teil:Methoden

Page 6: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 6Uwe Lämmel

Klassendiagramm

Page 7: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 7Uwe Lämmel

Das DoME-Objekt-Modell

Page 8: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 8Uwe Lämmel

CD Quelltextpublic 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

Page 9: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 9Uwe 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

Page 10: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 10Uwe Lämmel

Datenbank-Quelltextclass 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

Page 11: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 11Uwe 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

Page 12: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 12Uwe Lämmel

Vererbung

Page 13: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 13Uwe 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

Page 14: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 14Uwe Lämmel

Vererbung in Java

class Medium{ ...}

class CD extends Medium { ...}

class DVD extends Medium{ ...}

keine Änderung

Änderung

Page 15: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 15Uwe Lämmel

Oberklasse

class Medium {

private String titel; private int spielzeit; private boolean habIch; private String kommentar;

// Konstruktoren und Methoden folgen …} // Medium

Page 16: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 16Uwe 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

Page 17: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 17Uwe 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

Page 18: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 18Uwe 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

Page 19: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 19Uwe 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.

Page 20: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 20Uwe Lämmel

Weitere Medien

Page 21: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 21Uwe Lämmel

mehr Hierarchie

Page 22: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 22Uwe Lämmel

class Databank { private ArrayList<Medium> medien; /** * Erzeuge eine leere Datenbank */ public Databank() { medien = new ArrayList<Medium>(); } // Konstruktor

/** * Hinzufügen eines Mediums */ public void erfasseMedium(Medium dasMedium) { medien.add(dasMedium); } // Database ...} // Database

neuer Datenbank-Code

Page 23: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 23Uwe Lämmel

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

neuer Datenbank-Code

Page 24: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 24Uwe Lämmel

Subklassen und Subtyp

Klassen (Bauplan-) definieren Typen

Subklassen definieren Subtypen.

Objekte der Subklassen benutzbar,wann immer ein Objekt der Oberklasse erforderlich (substitution )

Page 25: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 25Uwe 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

Page 26: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 26Uwe Lämmel

Klassendiagramm

Page 27: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 27Uwe Lämmel

Objekt – Diagramm

Page 28: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 28Uwe Lämmel

Polymorphe Variablen

Objekt-Variablen in Java sind polymorph: können Objekte verschiedener Typen

speichern:– deklarierten Typ– beliebiger Subtyp

Page 29: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 29Uwe 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

Page 30: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 30Uwe 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

Page 31: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 31Uwe Lämmel

Die Klasse Objekt

Alle Klassen erben von Object

Page 32: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 32Uwe Lämmel

Klassendiagramm

Page 33: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 33Uwe Lämmel

Probleme mit der Ausgabe

CD: Rites I (49 min)*Jan GarbarekAnzahl Titel: 16Das Beste auf dem Saxophon

 DVD: Hair (119 min) Milos Forman

Das Musical!

Titel: Rites I (49 min)* Das Beste auf dem SaxophonTitel: Hair (119 min)

Das Musical!

Was wir wollen:

Wir bekommen:

Page 34: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 34Uwe 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

Page 35: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 35Uwe Lämmel

Lösung: Überschreiben

print in allen Klassen jede Unterklasse mit

eigener print Version: print in Unterklasse

überschreibt print der Oberklasse (Overriding)

print print

print

Page 36: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 36Uwe 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)

Page 37: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 37Uwe Lämmel

Methoden-Aufruf

Weder Vererbung noch Polymorphie

Page 38: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 38Uwe Lämmel

Methoden-Aufruf

Vererbung aber kein Überschreiben

Page 39: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 39Uwe 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

Page 40: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 40Uwe 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

Page 41: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 41Uwe Lämmel

UML-Diagramm

Person

namegetNname()

Franzose

Bayer

getGruss() setLieblingsbier()

lieblingsbier

Deutscher

getGruss()getGruss()

Page 42: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 42Uwe Lämmel

Dynamisches BindenPerson

name

getName()

Deutscher

Bayerlieblingsbier getName()getGruss()

getGruss()

setLieblingsbier()getGruss()

Page 43: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 43Uwe 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).

Page 44: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 44Uwe Lämmel

Hierarchie in der Vererbung

Page 45: Vererbung Folie 1 Uwe Lämmel Einführung in die Programmierung Vererbung Uwe Lämmel Fakultät für Wirtschaftswissenschaften laemmel.

Vererbung Folie 45Uwe Lämmel

Ende