Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Überladen

Überladen (von englisch overloading) bedeutet in der Softwareentwicklung das bewusste Etablieren von Polymorphien, sodass ein und dasselbe Sprachelement …

Inhalt5 Abschnitte
  1. 1. Grundidee des Überladens
  2. 2. Auswahl nach dem Datentyp
  3. 3. Methodenüberladung
  4. 4. Abgrenzung zu ähnlichen Mechanismen
  5. 5. Operatorüberladung

Grundidee des Überladens

Überladen bezeichnet in der Softwareentwicklung das bewusste Einrichten von Polymorphie: Dasselbe Sprachelement, etwa ein Operator, Konstruktor oder Literal, kann je nach Kontext unterschiedliche Bedeutungen haben. Compiler oder Interpreter wählen anhand der beteiligten Datentypen aus, welche konkrete Operation ausgeführt wird. Weil Überladen ein rein syntaktischer Mechanismus ist, gilt es nach Strachey als Ad-hoc-Polymorphie.

Nicht alle Programmiersprachen unterstützen Überladen. Besonders häufig kommt es in objektorientierten Programmiersprachen vor. Von Überladung spricht man genauer dann, wenn nicht nur fest in die Sprache eingebaute Mehrdeutigkeiten existieren, sondern Programmierende durch Sprachkonstrukte zusätzliche Bedeutungen festlegen können.

Auswahl nach dem Datentyp

Der Operator + kann je nach Datentyp für sehr verschiedene Operationen stehen:

• Bei 1 + 2 führt er eine Integer-Addition aus; das Ergebnis ist 3.

• Bei "abc" + "def" verbindet er zwei Strings; das Ergebnis ist "abcdef". Diese Operation heißt String-Konkatenation.

Obwohl beide Ausdrücke dasselbe Operatorsymbol verwenden, sind Addition und Konkatenation unterschiedliche Vorgänge. Compiler oder Interpreter erkennen die Datentypen der Operanden und wählen die passende Methode aus. Kann eine Sprache zusätzlich eine Bedeutung von + für weitere Datentypen wie Arrays definieren, handelt es sich um Operatorüberladung.

Methodenüberladung

Methodenüberladung liegt vor, wenn mehrere Methoden denselben Namen tragen, aber unterschiedliche Parameter erwarten. Beim Aufruf bestimmt der Compiler anhand der Parameter und ihrer Datentypen automatisch, welche Methode gemeint ist.

Ein typisches Pascal-Beispiel sind zwei Methoden namens GibAus: GibAus(text: String) gibt einen Text direkt aus, während GibAus(zahl: Integer) eine ganze Zahl zunächst mit IntToStr in einen Text umwandelt und dann ausgibt. Deshalb ruft GibAus('Hallo Welt!') die String-Variante und GibAus(4711) die Integer-Variante auf. Bei Funktionen erlauben manche Sprachen außerdem eine Überladung anhand des Ergebnis-Typs.

Ein Nachteil ist der mögliche Verlust an Übersichtlichkeit. Zudem können Probleme entstehen, wenn später weitere Überladungen ergänzt werden, weil die Auswahl der passenden Methode dadurch beeinflusst werden kann.

Abgrenzung zu ähnlichen Mechanismen

Standardwerte sind keine Methodenüberladung im eigentlichen Sinn. Ein Standardwert oder default argument ermöglicht es, dieselbe Methode mit unterschiedlich vielen Argumenten aufzurufen. Bei procedure GibAus(text: string = 'kein Parameter übergeben') verwendet GibAus('Hallo Welt!') den übergebenen Text; bei GibAus() wird stattdessen der Standardwert "kein Parameter übergeben" eingesetzt.

Eine Methode mit Standardwert lässt sich funktional durch überladene Methoden ersetzen: Eine Variante nimmt den Text entgegen, eine zweite parameterlose Variante ruft die erste mit 'kein Parameter übergeben' auf. Das ist besonders in Sprachen hilfreich, die keine Standardwerte unterstützen, beispielsweise Java.

Auch implizite Typumwandlungen sind von Methodenüberladung zu unterscheiden. Erwartet eine einzelne Methode einen Gleitkommawert vom Typ Real, kann sie in vielen Sprachen trotzdem mit einem Integer aufgerufen werden; der Wert wird automatisch umgewandelt. Dies ist bei einem Wertparameter möglich, beispielsweise bei QuadriereWertparameter(basis: Real).

Bei einem Referenzparameter müssen formaler und tatsächlicher Parameter dagegen übereinstimmen. QuadriereReferenzparameter(var basis: Real) kann deshalb nicht mit einer Integer-Variablen aufgerufen werden. Der Compiler meldet einen Fehler, weil die Methode über die Referenz möglicherweise eine Kommazahl zurückschreiben würde, obwohl die ursprüngliche Variable vom Typ Integer ist. Eine zusätzliche überladene Variante QuadriereReferenzparameter(var basis: Integer) macht einen solchen Aufruf kompilierbar.

Operatorüberladung

Die meisten Programmiersprachen verwenden entsprechend der mathematischen Tradition dieselben Operatorsymbole wie + oder - für Ganzzahl- und Gleitpunktarithmetik. Operatorüberladung erweitert dieses Prinzip auf benutzerdefinierte Typen und ermöglicht, bekannte Schreibweisen für eigene Datenstrukturen zu verwenden.

Das C++-Beispiel definiert den Typ komplexe_zahl mit den Gleitkommafeldern real und imag. Eine Funktion operator+ erhält zwei komplexe Zahlen und liefert eine neue komplexe Zahl, deren Realteil die Summe der Realteile und deren Imaginärteil die Summe der Imaginärteile ist. Für z1 mit 5.0 und 3.14159 sowie z2 mit 0.0 und -3.14159 ergibt z1 + z2 eine komplexe Zahl mit Realteil 5 und Imaginärteil 0.

In C++ lassen sich fast alle vorhandenen Operatoren überladen. Meist kann dies sowohl durch freistehende Funktionen als auch durch Methoden geschehen.

Das Ziel ist eine gut lesbare Schreibweise. So ist (a + b) * c leichter zu lesen als mal(plus(a, b), c). Eine Überladung kann die Lesbarkeit jedoch verschlechtern, wenn ihre Bedeutung nicht allgemein bekannten Konventionen entspricht. Operatorüberladung ist lediglich syntaktischer Zucker: Dieselbe Funktionalität könnte in aller Regel auch mit normalen Funktionen oder Methoden umgesetzt werden.

Weiterlesen

Polymorphie (Programmierung) Polymorphie oder Polymorphismus (griechisch für Vielgestaltigkeit) ist ein Konzept in der objektorientierten Programmierung, das ermöglicht, … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Addition Die Addition basiert auf dem Vorgang des Zählens. Deshalb verwendet man für den Vorgang, eine Addition auszuführen, neben Addieren auch den Ausdruck … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Methode (Programmierung) Methoden (englisch method oder member function) sind in der objektorientierten Programmierung Unterprogramme in der Form von Funktionen oder Prozeduren, … Integer (Datentyp) Als grundlegender arithmetischer Datentyp werden Ganzzahlen von der Hardware fast aller Rechenanlagen nativ unterstützt und sind in nahezu jeder … Pascal (Programmiersprache) Besonderheiten · Sehr hohe Prozesssicherheit · Keine nullterminierten Zeichenketten · Strikte Trennung zwischen Programm, Funktionen und Prozeduren · Deklarationen. Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … Mathematik An deutschen Universitäten gehört die Mathematik meistens zur selben Fakultät wie die Naturwissenschaften, und so wird Mathematikern nach der Promotion in der …