Polymorphie in Java (Polymorphie in Java), Lektion, Seite 724168
https://www.purl.org/stefan_ram/pub/polymorphie_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Polymorphie in Java 

Polymorphie des Operators »+«

Die Java -Implementation enthält zwei Programme : Eines für eine numerische Addition  mit der Operation [int+int] und eines für eine Zeichenfolgenverkettung  mit der Operation [java.lang.String+java.lang.String]. Bei der Übersetzung des Programms legt der Compiler die für einen Operator zu verwendende Operation an Hand der Typen der Operanden fest.

Solch eine Festlegung eines (internen) Programmes an Hand der Typen der Operanden  wird als Polymorphie  bezeichnet. Sie ist hier sehr schön zu erkennen: Der Operator »+« steht in Java  für die numerische Addition oder  für die Zeichenfolgenverbindung; die Auswahl erfolgt durch den Typ der Operanden. Entsprechend wird der Operator »+« in Java  als ein polymorpher Operator  bezeichnet.

Eine solchen polymorphen Operator nennt man auch einen überladenen Operator, und spricht von Operatorüberladung. Der Begriff kommt daher, daß der Operator mit mehr als einer Bedeutung „beladen“ ist, er steht als für mehrere verschiedene Operationen (»[int+int]« beziehungsweise »[java.lang.String+java.lang.String]«).

Arithmetische Summierung
123 + 456
Die internen Werte werden mit der Operation [int+int] (numerische Addition) summiert
«123» [int+int] «456»
Zeichenfolgenverbindung
"123" + "456"
Die internen Werte werden mit der Operation [java.lang.String+java.lang.String] (Zeichenfolgenverkettung) verbunden
«"123"» [java.lang.String+java.lang.String] «"123"»

Ohne  Polymorphie würde man für die Zeichenfolgenverbindung einen anderen  Operator (wie beispielsweise »&«, »~« oder ».«) verwenden als für die numerische Addition.

Mit  Polymorphie verwendet man den gleichen Operator für verschiedene Operationen und legt man durch den Typ  der Operanden fest, was genau passieren soll.

Polymorphie in der deutschen Sprache

Auch bei Ausdrücken wie „ein Auto waschen“, „Wäsche waschen“ oder „Geld waschen“ steht das Verb „waschen“ für ganz unterschiedliche konkrete Vorgänge, die vom Typ des Subjekts abhängen. Die Sprache wäre komplizierter, wenn man für jeden dieser Vorgänge ein eigenes Wort festlegen wollte.

Polymorphie des Operators »/«

Auch der binäre Operator »/« ist polymorph. Er steht je nach dem Typ der Operanden für die für die ganzzahlige  Division (mathematisch ‹  ›) oder für die Division mit Nachkommastellen  (mathematisch ‹  ›).

Ganzzahlige Division
1/2
Die internen Werte werden mit dem internen Programm »[int/int]« (ganzzahlige Division) dividiert
«1» [int/int] «1»
Division mit Nachkommastellen
1./2.
Die internen Werte werden mit dem internen Programm »[double/double]« (Gleitkommadivision) dividiert
«1.» [double/double] «1.»
[0.5]

Polymorphie des Operators »-«

Schon der unäre Operator »-« ist polymorph. Denn da eine ganze Zahl intern anders  dargestellt wird als eine Gleitkommazahl, ist auch hier für jeden der beiden Datentypen eine eigenes internes Programm zum Vorzeichenwechsel nötig.

Vorzeichenwechsel ganzer Zahlen
-1
Der interne Wert wird von dem internen Programm »[-int]« (Vorzeichenwechsel für int-Werte) verarbeitet
[-int] «1»
Der interne Wert wird von dem internen Programm »[-double]« (Vorzeichenwechsel für double-Werte) verarbeitet
[-double] «1.»

Ohne Polymorphie müßte man für den Wechsel des Vorzeichens eines int-Operanden einen anderen Operator  als für den Wechsel des Vorzeichens eines double-Operanden verwenden und beispielsweise »⊟1« aber »⊖1.« schreiben. Auch bei verschiedenen anderen Operatoren müßte man dann jeweils verschiedene Zeichen verwenden. Es könnte aber schwierig werden, sich die vielen dann nötigen Operatorzeichen zu merken.

Typ eines Operatorausdruck

Der Typ  eines Operatorausdrucks immer bereits durch den Operator  und die Typen der Operanden  bestimmt.

Es ist also niemals  nötig, einen Ausdruck erst auswerten  zu lassen, um dessen Typ zu erfahren.

Beispielsweise ist die Signatur von »-1« »-int«, und jeder Ausdruck mit jener Signatur hat den Typ »int«.

Der Typ eines Ausdrucks  ist immer bereits durch den Quelltext  bestimmt.

Diskussion der Polymorphie von »+« *

Die Polymorphie ist im Falle der Verwendung des Operators »+« sowohl zur arithmetischen Addition als auch zur Zeichenfolgenverbindung umstritten, da man es in Frage stellen kann, ob man das Verketten von Zeichenketten als eine Art von „Addition“ ansehen darf. Falls dem nicht  so wäre, dann wäre es falsch oder schlechter Stil, das Additionszeichen »+« dafür mitzuverwenden. Jedoch könnte man dies dann nur den Gestaltern der Programmiersprache vorwerfen, nicht  aber ihren Benutzern (also den Programmierern). Deswegen sollte sich der Leser durch diese Bedenken nicht  davon abhalten lassen, die Verkettung mit dem Pluszeichen »+« jederzeit zu verwenden, wenn sie ihm als nützlich erscheint.

Die Kritiker sehen in dem mathematischen Symbol »+« ein Zeichen, das in der Mathematik immer für eine kommutative  Operation steht – eine Operation also, bei der die Reihenfolge der Operanden auch vertauscht  werden kann, ohne das Ergebnis (die Summe) zu ändern. Sie sagen, daß das Summenzeichen nicht  für die Zeichenfolgenverbindung  verwendet werden sollte, weil diese nicht  kommutativ ist. Dabei übersehen sie aber, daß man das Symbol »+« auch in der Mathematik manchmal für nicht-kommutative  Operationen (in Monoiden) verwendet. (Obwohl es Stimmen gibt, die sagen, daß dann ein Multiplikationszeichen bevorzugt wird.) Außerdem ist die Polymorphie mit ihrer „metaphorischen Verwendung“ von Verben ein wichtige Eckpfeiler der objektorientierten Programmierung (wie später im Kurs behandelt werden wird), und daher paßt es zu einer objektorientierten Programmiersprache, diese auch bei Operatoren zu verwenden. Schließlich gibt es in der Praxis keine Probleme mit dieser Überladung des +-Operators.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724168 stefan_ram:724168 Polymorphie in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724168, slrprddef724168, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/polymorphie_java