Diskussion:Eiffel (Programmiersprache)/Archiv/2005

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Überladen von Operatoren

Das stand offenbar von Anfang an im Artikel. Gibt es aber in Eiffel nicht, und zwar mit Absicht. Jedes Feature hat eine Signatur, und die bleibt bei der Vererbung erhalten. Höchstens können die Typen durch Unterklassen-Typen der originalen Typen ersetzt werden, die aber konform zu den Oberklassen sein müssen. --Karljunk 04:53, 19. Mär 2005

Ich zitiere mal aus einer Publikation von Interactive Software Engineering Inc. von 1987:
operator overloading
The term "operator overloading" is not entirely adequate since the issue is whether functions may be assigned names that will be used in prefix or infix form in calling expressions. This is a syntactic, not a semantic issue; the more impotant form of overloading, the semantic one, is provided in the object-oriented context by redefinition and dynamic binding.
C++ offers the possibility of using an operator (from a set of predefined ones) as function name. Eiffel offers "prefix" and "infix" operators, which achieve the same purpose. So there is no significant difference between the two languages here.
dibe 00:16, 23. Mär 2005 (CET)
Ich zitiere mal aus Eiffel, the Language (1992), Seite 17, nach dem die Vorteile von "dynamic Binding" erklärt wurden: "This technique is particularly attractive when compared to its closest equivalent in traditional approaches. In Pascal or Ada, you would need records with variant components, ... The Ada facilities for overloading and genericity do not bring any improvement to this respect ...". Ich wüsste nicht, wo sonst in diesem Buch noch von "overloading" die Rede ist. Tatsächlich ist wohl das Überladen von Funktionen und Operatoren durch Ada populär geworden. Dort kann man schon seit jeher - lange bevor die objektorientierte Programmierung populär wurde, Funktionen und Operatoren mehrfach definieren mit jeweils verschiedenen Parameterlisten. Dies ist sicherlich von Übel, denn wie leicht kann man einen aktuellen Parameter mit einem ungewollten Typ erwischen, und der Compiler akzeptiert es, führt aber dann eine ganz andere Routine aus als gedacht. Solche Fehler sind sicher schwierig zu finden. Das C++ Beispiel, dass sich unter [Überladen] findet, geht in Eiffel genausowenig, da es der gleiche Scheiß wie in Ada ist. Wenn man sowas objektorientiert machen will, dann muss man ganz anders vorgehen, nämlich wie z. B. bei der Funktion abs in NUMERIC, die durch dynamisches binden auch auch auf sowohl INTEGER als auch DOUBLE targets angewandt werden kann. Dann heist es aber nicht abs(n), sondern n.abs. Das ist etwas so fundamental anderes, dass ich denke, der Begriff Überladen sollte nur für den objektorientierten Ansatz nicht verwendet werden sollte. In C++ geht natürlich beides, aber nur eines sollte Überladen heißen. Und das ist der "traditional approach".
--Karljunk 18:20, 23. Mär 2005 (CET)
Ich kenn mich mit Ada nicht so aus, komme eher von C++, wo "operator overloading" eigentlich nicht viel mehr meint als Operatoren für Klassen zu definieren; aber da das auch im vom mir zitierten Text gesagt wird, "operator overloading" sei nicht eine entirely adequate bezeichnung, sollte man vielleicht nur schreiben: Definition von Prä- und Infix-Operatoren möglich.
dibe (z.Z. ausgeloggt)
Habe ich eben so ähnlich eingefügt. Mir schien es sinnvoll, die Wesensgleichheit von Operator auf Funktion in Eiffel hervorzuheben. --Karljunk 18:05, 30. Mär 2005 (CEST)