Polymorphismus ist ein Begriff, der in der objektorientierten Programmierung (OOP) benutzt wird. Was man darunter versteht, erklären wir Ihnen hier.
Der Begriff Polymorphismus kommt aus dem Griechischen und bedeutet kann mehrere Formen annehmen. Diese Eigenschaft ist eines der wesentlichen Verfahren der objektorientierten Programmierung. Während das Erbe die Klassen (und ihre Hierarchie) betrifft, bezieht sich der Polymorphismus auf die Objektmethoden.
Man unterscheidet im Allgemeinen drei Typen von Polymorphismen:
Ad-hoc-Polymorphismus oder auch Überladung (overloading)
Parametrischer Polymorphismus auch Datenvorlage</bold (template)
<bold>Vererbungspolymorphismus oder auch Ableitung (overriding)
Der Ad-hoc-Polymorphismus erlaubt gleichnamige Funktionen mit ähnlicher Funktionalität in beziehungslosen Klassen zu erzeugen (mit Ausnahme natürlich der Objektunterklassenzugehörigkeit). Als Beispiel können Basisklasse, Ableitungsklasse und Linkklasse jede eine Funktion darstellen. Dies entbindet von der Sorge der Objekttypen, wenn das Gewünschte am Bildschirm erscheinen soll.
Der Ad-hoc-Polymorphismus erlaubt somit, Operatoren zu definieren, deren Anwendung je nach Parametertyp differenziert ausfällt. Es wird beispielsweise möglich, den Operator + zu belasten und ihn zu zwingen, unterschiedliche Aktionen auszuführen, je nachdem ob es sich um eine Operation zwischen zwei Ganzen (Addierung) oder zwischen zwei Zeichenketten (Konkatenation) handelt.
Der parametrische Polymorphismus, auch Datenvorlage genannt, erlaubt die Definition mehrerer Funktionen mit demselben Namen, aber mit unterschiedlichen Parametern (in der Anzahl und/oder im Typ). Der parametrische Polymorphismus erlaubt somit, die automatische Wahl der anzuwendenden Methode gemäß des Datentyps.
So können zum Beispiel mehrere homonyme Methoden addition() definiert werden, die eine Summe von Werten ausführen.
Die Methode int addition(int, int) kann die Summe von zwei Ganzen widergeben.
Die Methode float addition(float, float) kann die Summe von zwei Floating-point-Zahlen widergeben.
Die Methode char addition(char, char) kann nach eigenem Ermessen die Summe von zwei Zeichen wiedergeben usw.
Die Zahl und den Typ (statisch) der Funktionsargumente nennt man Signatur.
Die Möglichkeit, eine Methode in Klassen neu zu definieren, die eine Basisklasse erben, heißt Ableitung. Die Objektmethode darf dann aufgerufen werden, ohne sich um ihren eigentlichen Typ zu kümmern: das nennt man Vererbungspolymorphismus. Dies erlaubt eine Abstrahierung von den Einzelheiten der abgeleiteten Klassen einer Objektfamilie, indem sie durch eine gemeinsame Schnittstelle (die Basisklasse) überdeckt werden.
Stellen wir uns ein Schachbrett mit folgenden Objekten vor: König, Dame, Läufer, Springer, Turm und Bauer. Jedes einzelne Objekt erbt das Objekt Schachfigur.
Die Methode Zug() kann dank Vererbungspolymorphismus - abhängig von der zum Zeitpunkt des Aufrufs referenzierten Objektklasse - den geeigneten Zug ausführen. Dies veranlasst insbesondere das Programm den Befehl Figur.Zug zu geben, ohne sich um die Spielstein-Klasse zu kümmern.
Foto: © Pixabay.