Objektorientierte Vererbung Person haarfarbe :String Student erbt von Person: extensional: Menge der Studenten ist Teilmenge der Personen Typsicht: Person p = new Student (); ist zuweisungskompatibel. Substituierbarkeit: Studenten haben alle Eigenschaften von Personen Student matNr :Integer Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Polymorphie durch Methodenredefinition: Person haarfarbe :String payLunch () Prof topic :String payLunch () Student matNr :Integer payLunch () Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Mehrfachvererbung Person haarfarbe :String payLunch () Prof Student topic :String payLunch () Student matNr :Integer payLunch () Zwitter Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Caveats: Person Attributüberdeckung Student Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Caveats: Person Methodenredefinition und Parameter Student Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Caveats: Person Initialisierung Student Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Caveats: Person Student Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Klassische Streitfragen Rechteck Quadrat Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Wann Vererbung verwenden? im Zweifel gar nicht Auslagern gemeinsamer Eigenschaften Design Pattern Libraries / Frameworks Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Wann Vererbung verwenden? im Zweifel gar nicht Auslagern gemeinsamer Eigenschaften Design Pattern Libraries / Frameworks Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Strategy Pattern ersetze if-then-else-if Ketten Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
If-then-else-if Kette: House run () ring () mode : int Struktur Verhalten Daten public void ring () { if (mode == SIRENE) { …} else if (mode == FLASH) { …} else if (mode == MAIL) { …} … Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Strategy Pattern: alarm :House :FlashLight class House { ring () Alarm ring () alarm FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten :House :FlashLight class House { public void ring () { alarm.ring (); } :Sirene :MailAlarm Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Strategy Pattern: alarm :House :FlashLight :Sirene :MailAlarm House ring () Alarm ring () alarm FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten :House :FlashLight :Sirene :MailAlarm Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Strategy Pattern: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Wann Vererbung verwenden? Fazit: Vererbung zur Strukturierung von Daten eher selten Hauptsächlich Strukturierung von Programmen Verwendung bei großen Programmen Bibliotheks-Komponenten Rahmenwerken Vorlesungen: Software Engineering 1 und Software Engineering 2 Design Pattern Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel