Polymorphismus
Transcrição
Polymorphismus
Chair of Software Engineering Einführung in die Programmierung Exercise Session: Week 7 http://openbook.galileodesign.de/javainsel5/bilderklein/klein365_java_06_019.gif Menü des Tages • • • • • Organisation & Recap Inheritance Genericity Polymorphismus Dynamic Binding 2 Organisation • Nächste Woche: Mock Exam (anwesenheitspflicht!) – 7. November 2012 in der Übungsstunde – Schaut euch die Zusammenfassungen an! • Bitte E-Mails lesen! 3 Recap • Assignment 5 – y.loved_one := x.loved_one ist nicht erlaubt! • Warum? U. a. wegen dem Uniform Access Principle – Um den Inhalt von zwei STRINGs miteinander zu vergleichen brauchen wir „~“ • "Oliver" = "Oliver" liefert False • "Oliver" ~ "Oliver" liefert True – Es heisst Schleife nicht Schlaufe – Code Duplikation vermeiden – Tipp: Modulo Operator: \\ • Bsp.: 5 \\ 2 liefert 1 • Kann benutzt werden um die letzte Ziffer einer Zahl zu bekommen: 123 \\ 10 liefert 3 – Tipp: Ganzzahldivision: // • Bsp.: 5 // 2 liefert 2 • Kann benutzt werden um die letzte Ziffer abzuschneiden: 123 // 10 liefert 12 • Fragen zur letzten Übungsstunde? • Zusammenfassung Übungsstunde Woche 6 4 Vererbung: Module view ADRESSE FAX_ADRESSE name+ strasse+ hausnummer+ plz+ wohnort+ telefon+ fax+ Als Nachkommen von ADRESSE ist FAX_ADRESSSE automatisch auch eine ADRESSE. Sie erbt somit sämtliche Eigenschaften ihres Vorgängers, wir müssen z.B. name oder hausnummer nicht erneut definieren. 5 Vererbung: Type view TIER VOGEL SÄUGETIER KATZE HUND AMSEL Die Vererbung stellt eine „ist-ein“-Beziehung zwischen den Nachkommen und Vorgängern da. KATZE ist ein SÄUGETIER, SÄUGETIER ist ein TIER. 6 Vererbung: Terminologie Rubbel die Katz Vorgänger von SÄUGETIER und VOGEL SÄUGETIER KATZE TIER Erbe von TIER HUND Echte Vorfahren von AMSEL VOGEL AMSEL Echte Nachkommen von TIER 7 Rubbel die Katz Vererbung: Terminologie ADRESSE FAX_ADRESSE name+ strasse+ hausnummer+ plz+ wohnort+ telefon+ fax+ Immediate Features der Klasse ADRESSE Immediate Features der Klasse FAX_ADRESSE …und die inherited Features aus der Klasse ADRESSE Es gibt inherited und immediate Features einer Klasse. Welche Feature sind immediate, welche inherited? 8 Vererbung… Quelle:: http://www.bowenkamp.net/wp-content/uploads/2007/05/frag-doch-mal.JPG 9 Polymorphismus • Übersetzung: „Vielgestalt“ • Polymorphismus bei Assignment und Argument passing – target := source – Bisher: Typ von target muss gleich dem Typ von source sein, z.B. bei a := b war bisher immer a, b: INTEGER deklariert. – Neu: target hat einen anderen Typ als source • Polymorphismus bei Datenstrukturen – z.B. eine Liste enthält Referenzen zu Objekten mit verschiedenen Typen – Liste von Figuren: Rechteck, Kreis, Viereck, … • Polymorphismus bei Entitäten und Ausdrücken – Zur Laufzeit können Objekte mit verschiedenen Typen an eine Entität gebunden sein. 10 Polymorphismus … • Bisher haben wir überall dort wo ein Typ verlangt war auch diesen Typ „geliefert“ – count: INTEGER Wir haben nur count nur Ganzzahlen zugewiesen. – oliver: PERSON Wir haben oliver nur auf Objekte vom Typ PERSON zeigen lassen. • Neu: Wir müssen nicht den Typ liefern der verlangt ist, es kann auch ein anderer sein. Jedoch können wir nicht einen beliebigen Typ auswählen, z.B. – count := „Katze“ geht nicht • Welche Regeln müssen wir einhalten? 11 Conformance Rule • Touch of Class – If a class D is a descendant of a class C, both nonexpanded, then types derived from D conform to those derived from C as follows: • If the classes are not generic, then D (as a type) conforms to C. • If they are generic, then D [T, U, …] conforms to C [T, U, …] (with the same generic parameters) – An expanded type conforms only to itself. C D 12 Polymorphism type rule • Touch of Class – For a polymorphic attachment to be valid, the type of the source must conform to the type of the target. • “Abstraktes” Beispiel: test local c: C d: D do Erlaubt create d c := d C Error! create c d := c end D 13 Ein anschauliches Beispiel • Wir haben eine Klasse TIER. • Wir erstellen eine weitere Klasse ZEBRA die von TIER erbt. • Wir erstellen noch eine Klasse LOEWE die ebenfalls von TIER erbt. • Nun können wir folgendes machen… 14 Ein anschauliches Beispiel … make -- Run application. local tier_1: TIER zebra_1: ZEBRA loewe_1: LOEWE do create create tier_1 tier_1 zebra_1 loewe_1 := zebra_1 := loewe_1 create tier_1 loewe_1 := tier_1 end Compiler Error! Was steckt umgangssprachlich formuliert hinter diesem Mechanismus? Nicht jedes Tier ist ein Löwe, aber jeder Löwe ist ein Tier. 15 Dynamic binding • Touch of Class – „Dynamic binding (a semantic rule) is the property that any execution of a feature call will use the version of the feature best adapted to the type of the target object.“ • Am besten ein Beispiel…weiter mit unseren Tieren – Jedes Tier möchte etwas fressen. – Jedes Tier hat unterschiedliche Fressgewohnheiten. – Wir fügen ein Feature hinzu: friss • EiffelStudio…. Zum Schluss • Recap – – – – Inheritance Genericity Polymorphismus Dynamic binding • Gut zu wissen – Mock Exam: Nächste Woche in der Übungsstunde • 7. November 2012, 15:15 Uhr – Deadline Übung 7: 14. November 2012, 23:59 Uhr – Keine Übung bis zur nächsten Woche • Tipp: Für das Mock Exam vorbereiten.