Häufige Fragen im Fachgespräch – Polymorphie – Anwendungsentwickler-Podcast #10
In der zehnten Episode meines Anwendungsentwickler-Podcasts beende
ich meine Reihe zu häufigen Fragen im Fachgespräch rund um die
Objektorientierung mit dem Thema Polymorphie. Inhalt Polymorphie
(oder auch Polymorphismus) heißt Vielgestaltigkeit.
26 Minuten
Podcast
Podcaster
Beschreibung
vor 10 Jahren
In der zehnten Episode meines Anwendungsentwickler-Podcasts
beende ich meine Reihe zu häufigen Fragen im Fachgespräch rund um
die Objektorientierung mit dem Thema Polymorphie.
Inhalt
Polymorphie (oder auch Polymorphismus) heißt
Vielgestaltigkeit.
Polymorphie ist ein Konzept der Objektorientierung, das zwei
konkrete Ausprägungen hat:
Variablen können unterschiedliche Datentypen annehmen.
Überall wo eine Basisklasse oder ein Interface erwartet wird
(Variablen, Parameter usw.), kann auch eine Subklasse bzw. eine
implementierende Klasse verwendet werden.
Bei Methoden wird erst zur Laufzeit entschieden, an welchem
Datentyp diese aufgerufen werden (dynamisches Binden). Da der
konkrete Datentyp zur Laufzeit vom deklarierten Datentyp
abweichen kann, ruft die Laufzeitumgebung dynamisch die Methode
des konkreten Datentyps auf. Wenn eine mehrstufige
Vererbungshierarchie vorliegt, wird die Methode aufgerufen, die
in der Hierarchie am weitesten unten liegt.
Beispiel 1: Das Interface Waschbar definiert die Methode
wasche(). Die Klasse Reinigung definiert die Methode
reinige(Waschbar zuWaschendesObjekt), die die Methode wasche()
aufruft. Die Klassen Auto und Hund implementieren Waschbar und
können nun beide von der Reinigung gewaschen werden.
Beispiel 2: Die Klasse Tier definiert die Methode gibLaut().
Die Klassen Hund und Katze erben von Tier und implementieren
gibLaut() (einmal als „Wuff“ und einmal als „Miau“). Die Klasse
Labrador erbt von Hund und implementiert gibLaut() nicht erneut.
Wenn nun ein Herrchen seinem Tier sagt, es soll Laut geben, dann
wird das Tier – je nachdem um welches konkrete Tier es sich
handelt – entweder „Wuff“ oder „Miau“ sagen. Ein Labrador wird
„Wuff“ sagen, da er die Methode von Hund erbt.
Weiterführende Diskussion
Was ist ein Interface?
Ein Sprachkonstrukt, dass in vielen objektorientierten Sprachen
verfügbar ist und quasi eine abstrakte Klasse mit
ausschließlich abstrakten Methoden darstellt.
Was ist der Unterschied zwischen einem Interface und
einer abstrakten Basisklasse?
In den meisten Sprachen kann man nur von einer Klasse erben,
aber mehrere Interfaces implementieren. Abstrakte Basisklassen
können zusätzlich zu abstrakten Methoden auch noch Attribute
oder implementierte Methoden enthalten.
Wann nutzt man ein Interfaces bzw. eine abstrakte
Basisklasse?
Eine abstrakte Klasse sollte verwendet werden, wenn die
Implementierung von Methoden wiederverwendet werden
kann/soll.
Ein Interface sollte verwendet werden, wenn komplett
unterschiedliche Implementierungen (z.B. Sortieralgorithmen)
oder sogar unterschiedliche Konzepte (Auto und Hund sind
Waschbar) abgebildet werden sollen.
Was ist parametrische Polymorphie (auch
Generics)?
Generische Klassen stellen allgemeingültige Algorithmen für
mehrere Datentypen bereit. Ein gutes Beispiel sind Listen
(List in Java), die nach der Parametrisierung (z.B.
List) nur noch (typsicher) mit einem Datentyp
arbeiten können.
Tipps für die Programmierpraxis
Immer gegen Abstraktionen, nie gegen Implementierungen
programmieren! (Dependency Inversion Principle)
Interfaces den Vorzug geben, da Vererbung eine sehr starke
Beziehung ist, die schwer aufzulösen ist.
Häufiges Muster: Abstrakte Klasse, die ein Interface
implementiert, vereint die Vorteile beider Konzepte.
Wenn man in einer objektorientierten Sprache switch benutzt,
hat man meist etwas falsch gemacht und sollte stattdessen besser
Polymorphie einsetzen. (Replace Conditional with Polymorphism)
Literaturempfehlungen
Wie immer der Klassiker für alles rund um Java:
*
(direkt beim Rheinwerk-Verlag bestellen*)
Ein sehr gutes Buch rund um die Objektorientierung und gerade
auch Polymorphie. Verständlich geschrieben und mit vielen
Praxisbeispielen angereichert. Auch wenn der Fokus auf Ruby
liegt, empfehle ich das Buch allen Einsteigern in die
Objektorientierung.
*
Das Standardwerk rund um das Thema Refactoring. Ein konkretes
Refactoring wird oben bereits erwähnt: Replace Conditional with
Polymorphism. Viele weitere werden mit
Schritt-für-Schritt-Anleitungen in diesem Buch beschrieben.
*
Links
Permalink zu dieser Podcast-Episode
RSS-Feed des Podcasts
Anwendungsentwickler-Podcast #2: Häufige Fragen im
Fachgespräch – Objektorientierung
Anwendungsentwickler-Podcast #6: Häufige Fragen im
Fachgespräch – Kapselung
Anwendungsentwickler-Podcast #8: Häufige Fragen im
Fachgespräch – Vererbung
Rheinwerk Computing :: Java ist auch eine Insel – 5.11
Dynamisches Binden
Polymorphismus (C#-Programmierhandbuch)
Polymorphie (Programmierung) – Wikipedia
The Dependency Inversion Principle
Why should I prefer composition over inheritance? –
Programmers Stack Exchange
Gute Erklärung zu Dependency Injection | Fachinformatiker
Anwendungsentwicklung
Replace Conditional with Polymorphism
Weitere Infos zum Fachgespräch
Du suchst noch mehr Tipps rund um das Fachgespräch? Dann
schau doch mal in diese Artikel- und Podcast-Kategorie:
Alle Artikel rund um das Fachgespräch.
Kennst du schon meine Hörbücher zur Vorbereitung
auf das Fachgespräch? Unter
dasperfektefachgespraech.de kannst du sie herunterladen. In
insg. über 10 Stunden gehe ich
über 200 Fragen im Detail durch und gebe
Tipps für die Beantwortung.
Und wenn du dich für meinen Newsletter einträgst, bekommst
du immer direkt alle Neuigkeiten von dieser Seite in dein
Postfach geliefert.
Jetzt anmelden!
Weitere Episoden
5 Minuten
vor 3 Wochen
11 Minuten
vor 4 Monaten
8 Minuten
vor 4 Monaten
8 Minuten
vor 4 Monaten
10 Minuten
vor 5 Monaten
In Podcasts werben
Kommentare (0)