Definition „Polymorphismus (Programmierung)“ Welche Arten von Polymorphie gibt es?
Anbieter zum Thema
Polymorphie ermöglicht es, Bezeichner anwendungsspezifisch Objekte verschiedener Datentypen annehmen zu lassen. Das macht Code wiederverwendbarer, übersichtlicher und wartbarer.
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.
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)