IT-Berufe-Podcast

Häufige Fragen im Fachgespräch – Polymorphie – Anwendungsentwickler-Podcast #10


Listen Later

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...
...more
View all episodesView all episodes
Download on the App Store

IT-Berufe-PodcastBy Stefan Macke

  • 5
  • 5
  • 5
  • 5
  • 5

5

1 ratings


More shows like IT-Berufe-Podcast

View all
Chaosradio by Chaos Computer Club Berlin

Chaosradio

7 Listeners

Computer und Kommunikation by Deutschlandfunk

Computer und Kommunikation

10 Listeners

IQ - Wissenschaft und Forschung by Bayerischer Rundfunk

IQ - Wissenschaft und Forschung

46 Listeners

ZEIT WISSEN. Woher weißt Du das? by ZEIT ONLINE

ZEIT WISSEN. Woher weißt Du das?

45 Listeners

c’t uplink - der IT-Podcast aus Nerdistan by c’t Magazin

c’t uplink - der IT-Podcast aus Nerdistan

5 Listeners

Eine Stunde History - Deutschlandfunk Nova by Deutschlandfunk Nova

Eine Stunde History - Deutschlandfunk Nova

109 Listeners

Smarter leben by DER SPIEGEL

Smarter leben

50 Listeners

Kampf der Unternehmen by Wondery

Kampf der Unternehmen

16 Listeners

kurz informiert by heise online by heise online

kurz informiert by heise online

2 Listeners

Quarks Science Cops by Quarks

Quarks Science Cops

19 Listeners

Terra X History - Der Podcast by ZDF - Terra X

Terra X History - Der Podcast

9 Listeners

Aha! Zehn Minuten Alltags-Wissen by WELT

Aha! Zehn Minuten Alltags-Wissen

25 Listeners

KI verstehen by Deutschlandfunk

KI verstehen

8 Listeners

Wirecard: 1,9 Milliarden Lügen by Süddeutsche Zeitung

Wirecard: 1,9 Milliarden Lügen

3 Listeners

Passwort - der Podcast von heise security by Dr. Christopher Kunz, Sylvester Tremmel

Passwort - der Podcast von heise security

3 Listeners