Einführung in die Programmierung Vererbung

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]

description

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

Transcript of Einführung in die Programmierung Vererbung

Page 1: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 2Uwe Lämmel

Inhalt

Vererbung Subtype Ersetzung Polymorphie

Page 3: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 4Uwe Lämmel

DoME-Objekte

Page 5: Einführung in die Programmierung Vererbung

Vererbung Folie 5Uwe Lämmel

DoME-Klassen

Obere Hälfte:Merkmale

Unterer Teil:Methoden

Page 6: Einführung in die Programmierung Vererbung

Vererbung Folie 6Uwe Lämmel

Klassendiagramm

Page 7: Einführung in die Programmierung Vererbung

Vererbung Folie 7Uwe Lämmel

Das DoME-Objekt-Modell

Page 8: Einführung in die Programmierung Vererbung

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 ausgabe(){ ... } ...} // CD

Page 9: Einführung in die Programmierung Vererbung

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 ausgabe( ) { ... } ...} // DVD

Page 10: Einführung in die Programmierung Vererbung

Vererbung Folie 10Uwe Lämmel

Datenbank-Quelltextclass Database {

private ArrayList<CD> cds; private ArrayList<DVD> dvds; ... public void ausgabe() { LineIO io = new LineIO(); for(CD cd : cds) { cd.ausgabe(); io.writeln(); } // for cd

for(DVD dvd : dvds) { dvd.ausgabe(); io.writeln(); } // for dvd } // list} // Database

Page 11: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 12Uwe Lämmel

Vererbung

Page 13: Einführung in die Programmierung Vererbung

Vererbung Folie 13Uwe Lämmel

Vererbung

Definieren einer Oberklasse (superclass) : Medium

Oberklasse verwaltet gemeinsame Merkmale

Definieren von Unterklassen (subclass) für CD und DVD

Unterklasse "erbt" (inherit) Merkmale der Oberklasse

Unterklassen fügen eigene Merkmale hinzu

Page 14: Einführung in die Programmierung Vererbung

Vererbung Folie 14Uwe Lämmel

Vererbung in Java

class Medium{ ...}

class CD extends Medium { ...}

class DVD extends Medium{ ...}

keine Änderung

Änderung

Page 15: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 19Uwe Lämmel

Konstruktor

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: Einführung in die Programmierung Vererbung

Vererbung Folie 20Uwe Lämmel

Weitere Medien

Page 21: Einführung in die Programmierung Vererbung

Vererbung Folie 21Uwe Lämmel

mehr Hierarchie

Page 22: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 23Uwe Lämmel

/** * Ausgabe alle CDs und DVDs * auf die Konsole */public void auflisten() { for(Medium medium : medien) { medium.ausgabe(); } //for } //auflisten

neuer Datenbank-Code

Page 24: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 25Uwe Lämmel

Subtypen und Parameter-Übergabe

class Database {

public void erfasseMedium(Medium medium) { ... }} //Database

Subklassen-Objekte als Superklassen-Parameter

AnwendungDVD dvd = new DVD(...);CD cd = new CD(...);

database. erfasseMedium(dvd);database. erfasseMedium(cd);

Page 26: Einführung in die Programmierung Vererbung

Vererbung Folie 26Uwe Lämmel

Klassendiagramm

Page 27: Einführung in die Programmierung Vererbung

Vererbung Folie 27Uwe Lämmel

Objekt – Diagramm

Page 28: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 31Uwe Lämmel

Die Klasse Objekt

Alle Klassen erben von Object

Page 32: Einführung in die Programmierung Vererbung

Vererbung Folie 32Uwe Lämmel

Klassendiagramm

Page 33: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 37Uwe Lämmel

Methoden-Aufruf

Weder Vererbung noch Polymorphie

Page 38: Einführung in die Programmierung Vererbung

Vererbung Folie 38Uwe Lämmel

Methoden-Aufruf

Vererbung aber kein Überschreiben

Page 39: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

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: Einführung in die Programmierung Vererbung

Vererbung Folie 41Uwe Lämmel

UML-Diagramm

Person

namegetNname()

Franzose

Bayer

getGruss() setLieblingsbier()

lieblingsbier

Deutscher

getGruss()getGruss()

Page 42: Einführung in die Programmierung Vererbung

Vererbung Folie 42Uwe Lämmel

Dynamisches BindenPerson

name

getName()

Deutscher

Bayerlieblingsbier getName()getGruss()

getGruss()

setLieblingsbier()getGruss()

Page 43: Einführung in die Programmierung Vererbung

Vererbung Folie 43Uwe Lämmel

Hierarchie in der Vererbung

Page 44: Einführung in die Programmierung Vererbung

Vererbung Folie 44Uwe 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 45: Einführung in die Programmierung Vererbung

Vererbung Folie 45Uwe Lämmel

Aufgabe

Verwaltung von Hochschulangehörigen– Studenten– Professoren– (Mitarbeiter)

Verwaltung eines Fuhrparks– LKWs– Busse