www.wikidata.de-de.nina.az
Dieser Artikel erlautert das Konzept des Uberladens bei Programmiersprachen Zu anderen Bedeutungen siehe Uberladung Uberladen von englisch overloading bedeutet in der Softwareentwicklung das bewusste Etablieren von Polymorphien sodass ein und dasselbe Sprachelement Operatoren Konstruktoren Literale und dergleichen unterschiedliche aus dem Kontext hervorgehende Bedeutungen annehmen konnen Das Uberladen wird da es sich um einen rein syntaktischen Mechanismus handelt nach Strachey als Ad hoc Polymorphie betrachtet Nicht alle Programmiersprachen ermoglichen das Uberladen als Verfahren ist es insbesondere bei objektorientierten Programmiersprachen anzutreffen Inhaltsverzeichnis 1 Erlauterung an einem Beispiel 2 Methodenuberladung 2 1 Abgrenzung 2 1 1 Standardwerte 2 1 2 Implizite Typumwandlungen 3 Operatoruberladung 4 Siehe auch 5 WeblinksErlauterung an einem Beispiel BearbeitenIn vielen Programmiersprachen steht der Operator fur verschiedene durchaus unterschiedliche Operationen 1 2 abc def Im ersten Fall ist das erwartbare Ergebnis 3 also eine Integer Addition im zweiten abcdef also eine String Konkatenation Dies sind im Grunde zwei sehr unterschiedliche Operationen Compiler oder Interpreter von Sprachen die eine solche sogenannte Polymorphie erlauben tun dies indem sie die anzuwendende Methode Addition oder Konkatenation aufgrund des Datentyps der beteiligten Operanden auswahlen Von Uberladung spricht man nun wenn eine solche Polymorphie nicht nur wie im Falle des Beispiels vorgefertigt in einer Sprache vorhanden ist sondern daruber hinaus auch durch Sprachkonstrukte weitere solcher Polymorphien geschaffen werden konnen Im obigen Beispiel etwa konnte die Sprache die Moglichkeit bieten durch Programmtext eine zusatzliche Bedeutung des Operators fur andere Datentypen etwa Arrays zu etablieren Dies ware dann ein Beispiel fur Operatoruberladung Methodenuberladung BearbeitenMethodenuberladung liegt vor wenn mehrere Methoden denselben Namen haben sie aber verschiedene Parameter engl argument erwarten Welche Methode genau aufgerufen wird wird dann bei jedem Aufruf anhand der Parameter und ihrer Datentypen automatisch vom Compiler bestimmt Ein typisches Beispiel ist eine Methode die sowohl Texte Strings als auch ganze Zahlen Integer auf dem Bildschirm ausgeben konnen soll Beispiel aus Pascal procedure GibAus text String overload begin writeln text ubergebenen Parameter ausgeben end procedure GibAus zahl Integer overload var zahlAlsText String begin zahlAlsText IntToStr zahl ubergebene Zahl in einen Text umwandeln writeln zahlAlsText ausgeben end begin GibAus Hallo Welt gibt den Text Hallo Welt aus GibAus 4711 gibt die Zahl 4711 aus end Im Falle von Funktionen ist in manchen Sprachen auch die Uberladung anhand des Ergebnis Typs moglich Nachteil ist ein Verlust an Ubersichtlichkeit und dass Probleme auftreten konnen wenn nachtraglich weitere Uberladungen hinzugefugt werden vgl das unten verlinkte Wikibook Abgrenzung Bearbeiten Standardwerte Bearbeiten Keine Methodenuberladung im eigentlichen Sinne ist der Standardwert engl default argument welcher ebenfalls dazu fuhrt dass eine allerdings dieselbe Methode mit unterschiedlichen namlich unterschiedlich vielen Parametern aufgerufen werden kann Wird ein Parameter ausgelassen wird hierbei stattdessen der Standardwert ubergeben procedure GibAus text string kein Parameter ubergeben begin writeln text ubergebenen Parameter ausgeben end begin GibAus Hallo Welt gibt Hallo Welt aus GibAus gibt den Standardwert kein Parameter ubergeben aus end Methoden mit Standardwert konnen problemlos in uberladene Methoden uberfuhrt werden Obiger Quelltext ist funktional mit folgendem identisch procedure GibAus text String overload begin writeln text ubergebenen Parameter ausgeben end procedure GibAus overload begin GibAus kein Parameter ubergeben fehlenden Parameter erganzen end begin GibAus Hallo Welt gibt Hallo Welt aus GibAus gibt den Standardwert kein Parameter ubergeben aus end Dies ist hilfreich in Sprachen die Standardwerte nicht unterstutzen beispielsweise Java Implizite Typumwandlungen Bearbeiten Ebenfalls von der Methodenuberladung zu unterscheiden sind implizite Typumwandlungen In vielen Programmiersprachen lasst sich eine einzelne Methoden die einen Gleitkommawert Real als Wertparameter erwartet auch mit einer ganzen Zahl Integer aufrufen Eine implizite Typumwandlung ist bei einem Referenzparameter nicht moglich da formale und tatsachliche Parameter ubereinstimmen mussen function QuadriereWertparameter basis Real Real begin result basis basis Ergebnis als Funktionswert zuruckgeben end procedure QuadriereReferenzparameter var basis Real begin basis basis basis Ergebnis dorthin schreiben wo der Parameter herkam end var zahl Integer begin zahl 4711 QuadriereWertparameter zahl implizite Typumwandlung Ergebnis der Funktion wird verworfen QuadriereReferenzparameter zahl Compilerfehler denn die aufgerufene Methode konnte keine Kommazahl zuruckgeben obwohl eine Kommazahl als Referenzparameter deklariert wurde end Wurde man im obigen Quelltext die folgende uberladene Methode und die overload Direktive bei der vorhandenen Methode erganzen ware das Programm kompilierbar procedure QuadriereReferenzparameter var basis Integer overload begin basis basis basis end Operatoruberladung BearbeitenSeit jeher unterschieden die meisten Programmiersprachen der mathematischen Tradition folgend nicht zwischen den Operatorsymbolen fur Ganzzahl Integer und Gleitpunktarithmetik real float Zur bruchlosen Erweiterung einer Sprache um benutzerdefinierte Typen ist es hilfreich die Operatorsymbole auch fur benutzerdefinierte Typen uberladen zu konnen Ein Beispiel fur das Uberladen des Operators in C struct komplexe zahl float real 0 float imag 0 komplexe zahl operator komplexe zahl links komplexe zahl rechts return komplexe zahl links real rechts real links imag rechts imag int main komplexe zahl z1 5 0f 3 14159f komplexe zahl z2 0 0f 3 14159f komplexe zahl z3 z1 z2 z3 m real 5 und z3 m imag 0 In C lassen sich fast alle vorhandenen Operatoren uberladen was in den meisten Fallen sowohl uber freistehende Funktionen wie hier als auch uber Methoden erfolgen kann Ziel der Operatoruberladung ist die leichte Lesbarkeit des Quelltext wobei stets beachtet werden sollte inwieweit diese durch uberladene Operatoren verbessert oder verschlechtert wird Wahrend beispielsweise a b c klar besser zu lesen ist als mal plus a b c ist dies bei weitem nicht immer der Fall insbesondere wenn die konkrete Uberladung nicht weithin bekannten Konventionen folgt Zuletzt ist anzumerken dass es sich bei Operatorenuberladung nur um syntaktischen Zucker handelt und es in aller Regel genau so moglich ware die gewunschte Funktionalitat auch durch normale Funktionen bzw Methoden zu implementieren Siehe auch BearbeitenPolymorphie Programmierung Kovarianz Informatik Weblinks BearbeitenUberladung Wikibook Strukturierte ProgrammierungNormdaten Sachbegriff GND 4531051 8 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Uberladen amp oldid 216521681