Ist das alles Polymorphismus?
-
<a href= schrieb:
http://de.wikipedia.org/wiki/Polymorphie_(Programmierung)#.C3.9Cberladen_und_Coercion">Bei der Überladung handelt es sich offenbar nicht um eine echte Form von Polymorphie, da man sich vorstellen könnte, der Compiler werde die Uneindeutigkeit durch die mehrfache Benutzung eines Symboles zur Kompilationszeit wieder auflösen.
-
einwand schrieb:
<a href= schrieb:
http://de.wikipedia.org/wiki/Polymorphie_(Programmierung)#.C3.9Cberladen_und_Coercion">Bei der Überladung handelt es sich offenbar nicht um eine echte Form von Polymorphie, da man sich vorstellen könnte, der Compiler werde die Uneindeutigkeit durch die mehrfache Benutzung eines Symboles zur Kompilationszeit wieder auflösen.
Ja, dieser Teil des Artikels ist schon seit Jahren online, und er ist schlicht und ergreifend falsch.
-
Konrad Rudolph schrieb:
Ja, dieser Teil des Artikels ist schon seit Jahren online, und er ist schlicht und ergreifend falsch.
Nach der Definition wie ich Polymorphie gelernt habe wäre der schon okay (und ich würde nach meiner Definition aus dem ersten Beispiel nur den ersten Fall als Polymorphie ansehen), auch wenn ich beide Argumentationen verstehe. In der IT sind nunmal einige Begriffe schwammig - und auch Dozenten lehren es nicht unbedingt eindeutig. Die Frage ist wo zieht man die Grenze für den Begriff Polymorphie? Im dynamischen (Laufzeit) oder statischen (Codebasis).
Da es sich hier um Unterrichtsstoff handelt, würde ich im Zweifel den Lehrer/Dozenten nach seiner Meinung fragen, um zumindestens in den Arbeiten die "richtige" Meinung zu besitzen.
-
asc schrieb:
Die Frage ist wo zieht man die Grenze für den Begriff Polymorphie? Im dynamischen (Laufzeit) oder statischen (Codebasis).
Da es einfach keine entsprechende Definition gibt, kann man IMHO eine so technische Grenze nicht ziehen. Diese Schwammigkeit stammt zum Teil auch einfach daher, dass diese Begriffe von Mathematikern eingeführt worden sind und dort gibt es solche Grenzen einfach nicht. Laufzeit, Compilezeit, who cares? Für das Konzept Polymorphie ist das eine vollkommen irrelevante Unterscheidung. Polymorphie wird nämlich auch dort verwendet, wo es diese Grenzen gar nicht gibt (nämlich speziell beim Lamddakalkül).
-
Konrad Rudolph schrieb:
Da es einfach keine entsprechende Definition gibt, kann man IMHO eine so technische Grenze nicht ziehen. Diese Schwammigkeit stammt zum Teil auch einfach daher, dass diese Begriffe von Mathematikern eingeführt worden sind und dort gibt es solche Grenzen einfach nicht. Laufzeit, Compilezeit, who cares? Für das Konzept Polymorphie ist das eine vollkommen irrelevante Unterscheidung. Polymorphie wird nämlich auch dort verwendet, wo es diese Grenzen gar nicht gibt (nämlich speziell beim Lamddakalkül).
Nur weil es Mathematiker so verwenden ist das damit ja noch nicht die gültige Definition für die Informatik. Aber in der Informatik wird sowas so gut wie nie so genau wie in der Mathematik definiert...
-
hehe schrieb:
Nur weil es Mathematiker so verwenden ist das damit ja noch nicht die gültige Definition für die Informatik. Aber in der Informatik wird sowas so gut wie nie so genau wie in der Mathematik definiert...
Daher: Lieber an den Dozenten/Lehrer wenden, damit "seine" Einstellung zu dem Thema nicht die eigene Note versaut.
cu André
-
hehe schrieb:
Konrad Rudolph schrieb:
Da es einfach keine entsprechende Definition gibt, kann man IMHO eine so technische Grenze nicht ziehen. Diese Schwammigkeit stammt zum Teil auch einfach daher, dass diese Begriffe von Mathematikern eingeführt worden sind und dort gibt es solche Grenzen einfach nicht. Laufzeit, Compilezeit, who cares? Für das Konzept Polymorphie ist das eine vollkommen irrelevante Unterscheidung. Polymorphie wird nämlich auch dort verwendet, wo es diese Grenzen gar nicht gibt (nämlich speziell beim Lamddakalkül).
Nur weil es Mathematiker so verwenden ist das damit ja noch nicht die gültige Definition für die Informatik. Aber in der Informatik wird sowas so gut wie nie so genau wie in der Mathematik definiert...
Nein, die haben schon informatisch gearbeitet. … darum ging es mir ja.
-
Also meinen Lehrer werde ich dazu ganz sicher nicht fragen. Das Problem ist einfach, er scheint selber nur das zu wissen, was er sich eben aus dem Buch zusammenliest.
Er ist ja sogar der Meinung, void main wäre richtig, bzw. es würde keinen Unterschied machen, ob void oder int nimmt, da man mit der main Funktion ja nichts zurückgeben würde.
Laut ISO ist es aber int main...
Meine Note mit C++ kann ich mir auch nicht mehr versauen, da wir in der 12. Klasse mit PHP weitermachen - was ich glücklicherweise vor C++ gelernt habe.Also soll ich das Überladen nun auch unter Polymorphie zählen?
Vielen Dank für eure Antworten,
Squall
-
Konrad Rudolph schrieb:
... Das einfachste Beispiel für Polymorphie ist wahrscheinlich Überladung ...
Hallo!
Könntest du eine Quelle angeben, in welcher überladene Funktionen mit Polymorphie in Verbindung gebracht werden? Die hier aufgeführten Argumente scheinen mir doch sehr vage.
Polymorphie ist ein völlig anderes Konzept als überladene Funktionen, und wird in der (mir bekannten) Literatur nirgends miteinander in Verbindung gebracht.
Gruß
-
Also bei Polymorphie spricht man nicht mehr von Überladen, sondern von Überschreiben. Und das ist rein Definitionstechnisch etwas anderes.
-
Quellcode schrieb:
Also bei Polymorphie spricht man nicht mehr von Überladen, sondern von Überschreiben. Und das ist rein Definitionstechnisch etwas anderes.
Überschrieben werden virtuelle Funktionen. Aber wo bitte steht geschrieben, dass polymorphe Funktionen virtuell sein müssen?
'polymorph' ist primär ein Attribut des Verhaltens, nicht der Auswahl. Oder dass eine polymorphe Methode (Designphase) durch eine einzelne Funktion (Implementationsphase) repräsentiert werden muss. Ich denke, bei dieser Diskussion wird zu oft das Mittel mit dem Zweck verwechselt.
-
Polymorphie bedeutet nur: wenn ich dem Objekt eine Nachricht schicke, reagieren unterschiedliche Objekte auf diese Nachricht unterschiedlich.
Und das schliesst Ueberladung eben ein. Virtuelle Funktionen werden zB auch oft zur Compiletime statisch ausgewertet
-
Shade Of Mine schrieb:
Polymorphie bedeutet nur: wenn ich dem Objekt eine Nachricht schicke, reagieren unterschiedliche Objekte auf diese Nachricht unterschiedlich.
Lies das nochmal genau durch. Du schickst einem Objekt eine Nachricht und verschiedene (also mehrere) Objekte reagieren unterschiedlich???
http://en.wikipedia.org/wiki/Polymorphism
In general, polymorphism describes multiple possible states for a single property (it is said to be polymorphic, or polymorphous).
-
Netter trollversuch, aber das naechste mal bitte weiter denken
Drehen wir den Satz halt um:
Die selbe (single) Nachricht an unterschiedliche Objekte liefert unterschiedliches Verhalten.
-
auf: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
steht folgendes:
Overriding and Overloading
If a Dog is commanded to speak(), this may emit a Bark.
However, if a Pig is commanded to speak(), this may emit an Oink.
They both inherit speak() from Animal, but their derived class methods
override the methods of the parent class; this is Overriding Polymorphism.Overloading Polymorphism is the use of one method signature, or one operator
[...] to perform several different functions depending on the implementation.Frei übersetzt heißt das:
Überschreiben tritt auf, wenn gleiche Funktionen verschiedener Unterklassen
derselben Basisklasse existieren. Dabei wird die Methode der Basisklasse von
der Methode der Unterklasse überschrieben. (Overriding)Überladen tritt bei Verwendung einer Signatur oder eines Operators auf um
mehrere verschiedene Funktionen, abhängig von ihrer Implementierung,
durchzuführen.
-
Shade Of Mine schrieb:
Drehen wir den Satz halt um:
Die selbe (single) Nachricht an unterschiedliche Objekte liefert unterschiedliches Verhalten.Und was soll das sein, Nachrichtenpolymorphismus? Was für Nachrichten den überhaupt?
-
Komisch schrieb:
Was für Nachrichten den überhaupt?
sende einem objekt die nachricht "sprich!" und es wird je nachdem, was für ein objekt es ist, sprechen (oder nicht).
in C++ z.b. so:void foo (Animal& a) { a.speak(); }
aber dass das so aussieht, ist nur konvention.
ganz interessant wäre hier vielleicht, sich etwas mit objective-C auseinanderzusetzen.
-
queer_boy schrieb:
Komisch schrieb:
Was für Nachrichten den überhaupt?
sende einem objekt die nachricht "sprich!" und es wird je nachdem, was für ein objekt es ist, sprechen (oder nicht).
in C++ z.b. so:void foo (Animal& a) { a.speak(); }
aber dass das so aussieht, ist nur konvention.
OK, "Nachricht senden" soll also Methode aufrufen heißen. Es muss aber nicht ein anderes Objekt sein. In deinem Beispiel ist es sogar immer das selbe, nämlich Animal a. Dieses "Tier-Objekt" zeigt also polymorpes Verhalten (Overriding). Die Methode "speak" hat natürlich auch unterschiedliche Bedeutungen, entsprechend dem Kontext zu welchem Tier sie gehört, also ist die Bedeutung von "speak" polymorph (Overloading). Wobei ich finde, dass das Beispiel "Tier-sprich" nicht wirklich gut ist, bei sprechenden Tieren denkt man eigentlich an was anderes, im deutschen auf jeden Fall.
-
Shade Of Mine schrieb:
...Und das schliesst Ueberladung eben ein. ...
Polymorphie hat in der objektorientierten Programmierung eine bestimmte Bedeutung. Es geht dabei darum mit einer Variablen Objekte verschiedener Klassen halten zu können. (Siehe z.B. Informatik-Handbuch/Hanser-Verlag, Balzert/Softwaretechnik usw. ...)
In c++ ist das Konzept mit Pointern/Referenzen auf Basisklassen (späte Bindung mittels virtueller Methoden) umgesetzt und das war es dann auch schon.
Überladene Funktionen/Methoden haben mit der ganzen Sache nichts zu tun.
Ich bitte bei gegenteiligen Behauptungen auch um den entsprechenden Nachweis.
Man lässt sich ja gerne belehren, aber nur durch Fakten.
-
ein bisschen eigeninitiative schadet nie.
erstes ergebnis einer goolge-suche mit den stichtworten "C++ polymorphism overloading":http://www.exforsys.com/tutorials/c-plus-plus/polymorphism-an-introduction.html
/edit: falls du dieser quelle nicht glaubst, dann vielleicht dieser:
http://en.wikipedia.org/wiki/C%2B%2B#Polymorphism