Definition „Polymorphismus (Programmierung)“ Welche Arten von Polymorphie gibt es?

Von chrissikraus 4 min Lesedauer

Anbieter zum Thema

Polymorphie ermöglicht es, Bezeichner anwendungsspezifisch Objekte verschiedener Datentypen annehmen zu lassen. Das macht Code wiederverwendbarer, übersichtlicher und wartbarer.

Dank Polymorphie können verschiedene Kindklassen in der objektorientierten Programmierung unterschiedliche Ergebnisse liefern.
Dank Polymorphie können verschiedene Kindklassen in der objektorientierten Programmierung unterschiedliche Ergebnisse liefern.
(Bild: u_ipaxmam83h / Pixabay)

Polymorphie ist eines der zentralen Konzepte in der objektorientierten Programmierung. Auf Deutsch übersetzt bedeutet der Begriff Vielgestaltigkeit. Gemeint ist, dass ein Objekt bei Aufruf unterschiedliche Formen abhängig von der jeweiligen Verwendung annehmen kann.

Polymorphie ist ein wichtiges Hilfsmittel, um komplexen Code zu vereinfachen. Man unterscheidet zwischen statischer Polymorphie und dynamischer Polymorphie. Je nach Programmiersprache kann die Umsetzung von Polymorphie etwas unterschiedlich ausfallen.

Statische Polymorphie

Unter statischer Polymorphie versteht man das Überladen von Methoden und Operatoren. Eine Klasse kann mehrere Funktionen mit gleichem Namen enthalten, die sich jedoch anhand ihrer Parameter unterscheiden. Eine Rechenfunktion könnte z. B. in zwei Varianten vorliegen.

Die erste Variante nimmt Parameter vom Typ int an und die zweite Variante akzeptiert Parameter vom Typ double. Je nachdem, ob der Methodenaufruf später im Code dann mit int oder double als Typ der Übergabeparameter erfolgt, wird automatisch die passende Funktion zugeordnet.

Man spricht von statischer Polymorphie, weil die auszuführende Methode zum Zeitpunkt des Kompilierens festgelegt wird. Anhand des Typs eines Objekts wird schon beim Kompilieren entschieden, welche überladene Methode gewählt werden muss. Statische Polymorphie kann dafür sorgen, dass Anwendungen zur Laufzeit performanter sind und Fehler früher auffallen.

Dynamische Polymorphie

Für dynamische Polymorphie wird mit abgeleiteten Klassen und virtuellen Methoden gearbeitet. Eine virtuelle Methode ist eine vererbbare und überschreibbare Methode. Es wird zunächst eine Basisklasse mit Funktionen definiert, von der beliebig viele Klassen abgeleitet werden können. Je nach Programmiersprache muss die Basisklasse hiefür möglicherweise noch als "virtual" gekennzeichnet werden. Die Ableitungen erben die Eigenschaften der Basisklasse, können aber die Implementierung von Methoden überschreiben, z. B. um die Funktion zu erweitern oder für den jeweiligen Anwendungszweck zu verändern. Ein Objekt der Basisklasse kann sich mithilfe einer virtuellen Methode wie ein Objekt der abgeleiteten Klasse verhalten.

Dynamische Polymorphie erhält ihren Namen daher, dass die Auswahl der Methoden nicht zum Zeitpunkt des Kompilierens, sondern zur Laufzeit erfolgt. Es wird also auf dynamische Weise bestimmt, welche Methode ausgeführt werden soll. Das ist z. B. dann wertvoll, wenn bestimmte Entscheidungen erst zur Laufzeit getroffen werden können. Zudem lässt sich dynamische Polymorphie flexibler nutzen als statische Polymorphie.

Welche Vorteile hat Polymorphie?

Polymorphie bietet Vorteile in den Bereichen Wiederverwendbarkeit, Übersichtlichkeit und Wartbarkeit. Sie alle tragen dazu bei, dass Code weniger komplex wird und somit auch langfristig einfacher nachvollziehbar bleibt.

Wiederverwendbarkeit

Polymorphie ermöglicht das Schreiben von Code, der für verschiedene Objekttypen verwendet werden kann. Wenn Code für mehrere Szenarien genutzt werden kann, muss dieser nicht für jeden neuen Fall dupliziert werden. Redundanzen können minimiert und die Länge des Codes optimiert werden.

Übersichtlichkeit

Polymorphie hilft dabei, Code übersichtlicher zu machen. In der gesamten Anwendung verteilte Duplikate werden durch abgeleitete Klassen vermieden und der Code wird vereinfacht. Der Quelltext wird besser nachvollziehbar und übersichtlicher, was vor allem in großen Projekten wertvoll ist.

Wartbarkeit

In der Regel müssen Projekte auch lange nach der ersten Entwicklung wartbar bleiben, damit Fehler behoben und Änderungen vorgenommen werden können. Polymorphie trägt zu einer gut nachvollziehbaren Struktur mit zentralen Anlaufstellen bei. Somit wird es einfacher, die passenden Stellen für eine Codeänderung zu identifizieren. Im Idealfall müssen Änderungen nur an einer einzigen Stelle vorgenommen werden, um im gesamten Projekt Gültigkeit zu haben.

Weitere Vorteile:

  • gute Erweiterbarkeit durch geringe Kopplung
  • hohe Flexibilität
  • hoher Abstraktionsgrad, z. B. bei der Implementierung von Schnittstellen

Welche Nachteile hat Polymorphie?

Polymorphie kann auch Nachteile wie Leistungseinbußen oder zu hohe Komplexität haben.

Leistungseinbußen

Speziell die dynamische Polymorphie kann sich negativ auf die Leistung einer Anwendung auswirken, weil hier zur Laufzeit die Auswahl von Methoden stattfindet. Schlimmstenfalls kann das zu deutlich spürbaren Leistungseinbußen führen. Das kann dem Benutzer das Gefühl einer schwerfälligen Anwendung geben oder im Fall von hochperformanten Systemen zum Flaschenhals werden. In den meisten Fällen sind die Leistungseinbußen durch dynamische Polymorphie jedoch kaum spürbar und können vernachlässigt werden.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Hohe Komplexität

Quellcode kann unter Umständen schwieriger zu verstehen sein, wenn Polymorphie genutzt wird. Entwickler müssen immer erst nachvollziehen, welche Methode in welchem Fall aufgerufen wird. Das könnte vor allem dann zum Problem werden, wenn sich ein Entwickler mit einem Stück Code befassen muss, dass er noch nicht gut kennt. Auch unerfahrene Programmierer könnten von Polymorphie verunsichert sein oder diese aus Unwissenheit falsch anwenden, sodass Laufzeitfehler oder schwer nachvollziehbarer Code entsteht.

Fazit

Polymorphie ist ein leistungsfähiges und weitverbreitetes Prinzip, das in fast allen gängigen Programmiersprachen genutzt werden kann. Methoden können abhängig vom Typ der beteiligten Objekte auf unterschiedliche Weisen genutzt werden, ohne den Code unnötig lang und kompliziert zu gestalten. Richtig angewendet bietet Polymorphie großes Potenzial, Aspekte wie Lesbarkeit, Wartbarkeit und Wiederverwendbarkeit zu optimieren.

(ID:49920743)