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.

Documentos relacionados