Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:m320_2024:learningunits:polymorphie [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m320_2024:learningunits:polymorphie [2026/08/30 14:06] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ===== 5. Polymorphie ===== | ||
| + | Die Polymorphie ist eine direkte Folge der Spezialisierung von Klassen. Jede abgeleitet Klasse weist die Merkmale der Oberklasse auf und ist somit auch vom Typ der Oberklasse.\\ | ||
| + | ---- | ||
| + | //Beispiel 6.5://\\ | ||
| + | {{modul: | ||
| + | //Abb 6.8:// Spezialisierung einer Klasse\\ | ||
| + | Für die Klasse '' | ||
| + | //Eurasier IST EIN Hund IST EIN Säugetier IST EIN Tier.//\\ | ||
| + | Somit ist klar, dass ein Objekt vom Typ '' | ||
| + | Das Objekt Eurasier ist somit **polymorph**, | ||
| + | ---- | ||
| + | Schauen wir uns die Auswirkungen der Polymorphie etwas vertieft an.\\ | ||
| + | Dazu geben wir jeder Klasse aus Beispiel 6.5 eine Fähigkeit mit auf den Weg und visualisieren dann das Objekt der Klasse '' | ||
| + | {{modul: | ||
| + | //Abb. 6.9: // | ||
| + | Je nach Sicht - hier durch die farbigen Brillen symbolisiert - sind mehr oder weniger Funktionen (Methoden) verfügbar. Aber was heisst das nun genau?\\ | ||
| + | Wenn das Objekt '' | ||
| + | Aber warum braucht es das?\\ | ||
| + | ===Auswirkung der Polymorphie=== | ||
| + | Die Auswirkung der Polymorphie lässt sich am besten an einem Beispiel mit " | ||
| + | ---- | ||
| + | //Beispiel 6.6://\\ | ||
| + | Wir spielen dazu mal Landwirt. Eine Aufgabe ist es, alle Tiere zu bewegen. Unsere Tiergruppe umfasst eine ganz bunte Mischung.\\ | ||
| + | {{modul: | ||
| + | //Abb 6.10: // | ||
| + | \\ | ||
| + | Wenn wir nun alle Tiere bewegen wollen, dann müsste das ohne Nutzung der Polymorphie in etwa wie folgt geschehen: | ||
| + | < | ||
| + | +-----------------------------------------+ | ||
| + | ¦ für eine_kuh in alle_kühe | ||
| + | ¦ +------------------------------------+ | ||
| + | ¦ ¦ eine_kuh.bewegen() | ||
| + | +----+------------------------------------+ | ||
| + | ¦ für eine_ente in alle_enten | ||
| + | ¦ +------------------------------------+ | ||
| + | ¦ ¦ eine_ente.bewegen() | ||
| + | +----+------------------------------------+ | ||
| + | ¦ .... ¦ | ||
| + | </ | ||
| + | Das ist natürlich recht umständlich. Und wenn neue Tiere dazu kommen, z.B. Lamas, muss der ganze Code entsprechend ergänzt werden. Hier kommt nun die Polymorphie zum Einsatz. Denn alle unsere Hoftiere erben ja von der Klasse '' | ||
| + | < | ||
| + | +-----------------------------------------+ | ||
| + | ¦ für ein_tier in alle_tiere | ||
| + | ¦ +------------------------------------+ | ||
| + | ¦ ¦ ein_tier.bewegen() | ||
| + | +----+------------------------------------+ | ||
| + | </ | ||
| + | Und das wärs dann auch schon. Kommen jetzt neue Tierarten dazu, ändert das an diesem Stück Code nichts. Toll oder?\\ | ||
| + | |||
| + | ---- | ||
| + | [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | |||