- Häufige Fragen im Fachgespräch – Objektorientierung – Anwendungsentwickler-Podcast #2
- Häufige Fragen im Fachgespräch – Kapselung – Anwendungsentwickler-Podcast #6
- Häufige Fragen im Fachgespräch – Vererbung – Anwendungsentwickler-Podcast #8
- Häufige Fragen im Fachgespräch – Polymorphie – Anwendungsentwickler-Podcast #10
- Häufige Fragen im Fachgespräch – Programmierung (Teil 1) – Anwendungsentwickler-Podcast #12
- Häufige Fragen im Fachgespräch – Programmierung (Teil 2) – Anwendungsentwickler-Podcast #13
- Relationale Datenbanken – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #17
- Normalisierung – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #18
- SQL – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #19
- Erläuterung der Gehaltsabrechnung – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #46
- Zusammensetzung des Stundensatzes – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #47
- Testverfahren für Software – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #94
- Unit-Tests – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #95
- Rückblick auf die Fachgespräche der Sommerprüfung 2022 (Fachinformatiker:in Anwendungsentwicklung) – IT-Berufe-Podcast #177
- Handelskalkulation, Skonto und Rabatt – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #148
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.
Podcast: Play in new window | Download (Duration: 26:00 — 12.4MB)
Abonnieren: Apple Podcasts | Spotify | RSS
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 Methodewasche()
. Die KlasseReinigung
definiert die Methodereinige(Waschbar zuWaschendesObjekt)
, die die Methodewasche()
aufruft. Die KlassenAuto
undHund
implementierenWaschbar
und können nun beide von derReinigung
gewaschen werden. - Beispiel 2: Die Klasse
Tier
definiert die MethodegibLaut()
. Die KlassenHund
undKatze
erben vonTier
und implementierengibLaut()
(einmal als „Wuff“ und einmal als „Miau“). Die KlasseLabrador
erbt vonHund
und implementiertgibLaut()
nicht erneut. Wenn nun einHerrchen
seinemTier
sagt, es soll Laut geben, dann wird das Tier – je nachdem um welches konkrete Tier es sich handelt – entweder „Wuff“ oder „Miau“ sagen. EinLabrador
wird „Wuff“ sagen, da er die Methode vonHund
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
undHund
sindWaschbar
) 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<T>
in Java), die nach der Parametrisierung (z.B.List<String>
) 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!
Neueste Kommentare