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 Dir eine kompakte Erklärung zu den unterschiedlichen Konzepten und deren Bedeutung in der objektorientierten Programmierung:
Polymorphismus und Polymorphie verstehen
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 Ueberladen 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.
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 Ueberladen
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.
Moechtest Du mehr ueber Softwareentwicklung & Programmierung lernen?
Mit unserem Projekt Rock the Prototype unterstützen wir aktiv das Prototyping von Software. Am besten lernst Du gute Software zu entwickeln indem Du Dir einen iterativen, prototypischen Softwareentwicklungsprozess aneignest.
Unser kostenloses Angebot fuer Dich: Rock the Prototype!
Unsere Community Initiative Rock the Prototype bietet Dir – kostenlos – eine Chance neue Technologien mit anderen im Team zu entwicklen und in der Praxis zu erproben.
Das darfst Du von Rock the Prototype erwarten:
Die Community Rock the Prototype ist Deine Chance um…
Deine Programmierfähigkeiten zu erweitern,
indem Du gemeinsam mit anderen
lernst technische Herausforderungen effektiv zu lösen,
neue Ideen und Fähigkeiten entwickelst und
wertvolle neue agile Methoden & Konzepte lernst
Lass Dich von anderen Entwicklern inspirieren!
Unser Motto ist: Coding is fun – im Team entsteht der beste Code!
Du wirst neue Konzepte und Best Practices entdecken,
Deine IT-Skills vertiefen und
Neues erlernen!