Polymorphismus

Was ist ein Polymorphismus?

Polymorphismus nennt der Informatiker das Überschreiben von Methoden in der Objektorientierten Programmierung. Dabei werden mehrere Formen der Polymorphie unterschieden. Wir geben eine kompakte Erklärung zu den unterschiedlichen Konzepten und deren Bedeutung in der objektorientierten Programmierung:

Polymorphismus und Polymorphie verstehen

Polymorphismus und Polymorphie verstehen: In der objektorientierten Programmierung werden mehrere Arten polymorpher Konzepte unterschieden.

Was bedeutet Polymorph?

Allgemein kennzeichnet polymorph die Fähigkeit eines Objekts unterschiedliche Formen anzunehmen. Der Begriff Polymorph stammt aus dem Griechischen: Poly = viele, morph = Form. Für die objektorientierte Programmierung ist die Polymorphie ein mächtiges Werkzeug und zugleich ein zentrales Konzept jeder objektorientierten Programmiersprache. Mit polymorpher Programmierung kannst Du Interfaces in unterschiedlichen  Ausprägungen effizient realisieren. Polymorphie ermöglicht Objekten basierend auf ihrem Typ behandelt zu werden.

Polymorphie – Unterschied zum Überladen von Methoden

Während mit dem Überladen von Methoden alle Methoden den gleichen Namen aber unterschiedliche Argumente nutzen, erweitert die Polymorphie dieses Programmierkonzept. Polymorphes Überschreiben nutzt sowohl identische Methodennamen wie auch identische Argumentnamen. Somit definiert Polymorphie zwei Methoden mit identischem Rückgabetyp und identischer Argumentenliste. Dazu nutzt polymorphes Überschreiben eine Subklasse und eine Superklasse.

Jetzt dieses Buch bei Amazon kaufen!

Bei Instanzmethoden handelt es sich um Methoden, die wie die Instanzvariablen  – einem speziellen Objekt zugeordnet sind. Instanzmethoden haben Zugriff auf sämtliche Teile des Objekts und können somit auch auf die versteckten Instanzvariablen zugreifen. Unseren Buchtipp findest Du hier.

Welchen Sinn ergibt es polymorph in zwei Klassen dieselben Methoden zu definieren?

Da Kindklassen von ihrer Elternklassen sämtlichen Eigenschaften erben besitzt die Subklasse automatisch sämtliche Methoden der Superklasse. Folglich würde die Subklasse nach dem Konzept der Vererbung ohne Methodendefiniton die Orginalmethode der Superklasse erben. Wenn wir die Methode in der Subklasse nun polymorph neu definieren, die Methode also überschreiben, ersetzen wir in Instanzen unserer Subklasse die allgemeine Methode der Superklasse durch eine spezielle Methodenfassung. Somit erhalten wir durch das Konzept der Polymorphe die Chance spezialisierte Funktionen in einer Kindklasse zu definieren.

Polymorphismus

1. Universeller Polymorphismus

Zu der Klasse der universellen Polymorphismen gehören alle parametergesteuerten sowie alle auf der Inklusion basierenden polymorphen Programmierkonzepte:

1.1 Parameter gesteuert

Die über Parameter gesteuerten polymorphen Ansätze unterscheiden sich im Detail wie folgt:

1.1.1 Generisch

Generische Typen und Operationen: Ein Typ-Parameter wird als generisch bezeichnet, wenn dieser einen Type Parameter besitzt. Ein Type-Parameter ist ein Platzhalter für einen spezifischen Programmtypen. Operationen auf generischen Typen werden in der Informatik als generische Operationen bezeichnet. Add() und get() sind Beispiele für generische Operationen.

1.2. Inklusions-Polymorphismus

Inklusions Polymorphismen kann man sich bildlich am besten mit den russischen Matrojschka Puppen vorstellen. Die Prinzipien des Subtyping und Subclassing unterscheidet sich im Detail wie folgt:

1.2.1 Subtypisierung

Wenn eine Klasse als Unterklasse einer anderen Klasse definiert wird, spricht der Informatiker von Subtypisierung. Ein Beispiel wäre die Klasse Limosine() als Unterklasse der Klasse Auto().

Zusätzlich muss der Subtyp das Liskov Substitutionsprinzip erfüllen: Alle Operationen der Superklasse müssen demzufolge entsprechende Subtype-Operationen aufweisen. Damit hat jede Subtype Operation automatisch eine schwächere Vorbedingung, d.h. die Unterklasse muss weniger oder dieselben Operationen wie ihre Elternklasse aufweisen. Zugleich hat jede Subtype Operation damit eine stärkere Nachbedingung, d.h. die Subklasse garantiert mehr Programmeigenschaften oder genauso viele.

1.2.2 Sub-Klassen

Das Konzept der Subklassen ist durch konsequente Anwendung des Konzepts objektorientierter Vererbung gekennzeichnet. Neben der Konzeption objektorientierter Programme kommt die verstärkte Strukturierung in Subklassen in der Programmanalyse und dem Objektdesign zur Anwendung. Das Überschreiben von Superklassen ist ein Spezialfall der Subklassenanwendung: In der Superklasse implementierte Methoden werden in der Subklasse reimplementiert. Folglich gibt es mehrere Methoden, die alle dieselbe Signatur verwenden, aber unterschiedliche Implementationen realisieren. Das Prinzip des Überschreibens ist ein elementarer Aspekt der objektorientierten Programmierung.

2. Ad-Hoc Polymorphismus

Eine Ad-Hoc polymorphe Funktion ist eine Klassenmethode die für unterschiedliche Argumenttypen funktioniert. Dabei nutzen polymorphe AdHoc-Funktionen dieselben Klassennamen für unterschiedliche Klassenfunktionen. Anhand des jeweiligen Typen des Arguments wird der Codeteil ausgeführt, der der jeweiligen polymorphen Ad-Hoc-Operation zugeordnet ist.

2.1 Überladen

Beim Überladen von Klassen nutzt der Programmierer denselben Klassennamen um unterschiedliche Programmoperationen zu realisieren. Die Signatur der Klasse wird genutzt um zu entscheiden welche der möglichen Operationen angesprochen wird. Die Signatur einer überladenen Methoden setzt sich aus den verwendeten Parametern und Rückgabewerten der Methode zusammen.

2.2 Type-Umwandlung

Die Type-Umwandlung – auch Type Promotion oder Type Conversion genannt – ist eine semantische Programmoperation. Mit der Typenumwandlung wird ein Argument eines Methodenaufrufs in ein Argument vom Type des erwarteten Programmoperators umgewandelt. Die Typenumwandlung wird somit vom Programm erzwungen. Durch die Typenkonvertierung werden Typenfehler (Type error) vermieden.

Mit der flexiblen Spezialisierung clever Ressourcen sparen!

Das Überschreiben von Methoden ermöglicht Programmfunktionen auf allgemeinen Klassen zu realisieren, ohne sich bereits vorab um spezielle Ausprägungen der Kindklasse kümmern zu müssen.

Benötigt ein Programm für einen Anwendungsfalls eine besondere Anpassung, so lässt sich durch eine polymorphe Klassenfunktion jederzeit die allgemeine Funktion durch diese Spezialisierung ersetzen. Eine wissenschaftliche fundierte Erläuterung findest Du hier.

Objektorientierung und Agile Softwareentwicklung

Einer der größten Vorteile bei konsequenter Objektorientierung ist die beliebige Wiederverwendbarkeit definierter Programmlogik. Objektressourcen stehen in Form vielfältigster Objektklassen zur freien Verwendung.

Jetzt lesen: Wie Du Software agil entwickelst und deine Softwareprogramme leicht portierbar gestaltest.

Ähnliche Einträge

Zum Glossar

Neuer Artikel!