Ist das alles Polymorphismus?
-
Hab eigentlich an Hooks gedacht, da kann man ja alles mithören. Gibt halt keine Kapselung.
-
Hm, nachdem ich jetzt die meisten der Quellen nachgeschlagen habe, fällte es mir dennoch schwer von meinem Standpunkt abzurücken.
Es gibt natürlich ältere Definitionen von polymorphen Verhalten bzw. Polymorphismus in denen überladene Funktionen dann z.B. in der Kategorie ad hoc polymorphism bzw. static polymorphism auftauchen. Alle Autoren (z.B. Herb Sutter, Scott Meyers, ...), die den Begriff auf diese Weise verwenden, unterscheiden aber auch klar, indem sie die entsprechenden Zusätze verwenden (ad hoc, static, compile-time, run-time, ...)
Wird der Begriff frei, also ohne Zusätze, im Zusammenhang mit OOP und C++ verwendet, was bei der (erdrückenden) Mehrheit der Autoren der Fall ist, dann geht es immer um dynamische Bindung. So wird der Begriff im Allgemeinen auch verstanden.
@queer_boy
Tutorials und Wikipedia sind nicht unbedingt gesicherte Quellen. Z.B. sieht das im deutschen Wikipedia schon ganz anders aus, da bestreitet der Autor, dass Überladung eine echte Form der Polymorphie ist. Damit hat er natürlich auch Recht, denn Überladung ist eigentlich nur eine syntaktische Hilfe für den Programmierer. Von polymorphem Verhalten kann (eigentlich) keine Reder sein.@Shade Of Mine
Im "nicht OOP Teil" von C++ kann man Funktionen schon garnicht überladen, d.h. die Diskussion in der Richtung erübrigt sich. Genauso wie die Diskussion über den Begriff Polymorphie in Bezug auf funktionale Sprachen. Das ist wieder etwas Anderes. Bitte bei der Sache bleiben.@Konrad Rudolph
Sehe ich genauso. Der Begriff Polymorphismus wurde in diesem Zusammenhang schon in verschiedenen Formen verwendet zu denen auch eine gewisse Systematik existiert (ad-hoc, universal, ... )
Ich finde, wenn man sich aber auf diese Systematik beruft, dann muss man auch die vollständigen Begrifflichkeiten verwendet. Ich bin Überzeugt, im Lehrbuch von Squall tauchen sie so nicht auf.Wie asc schon bemerkte können wir da aber wohl kaum eine Einigung erziehlen. Also, ich bleibe jedenfalls dabei, dass ich unter Polymorphie im Zusammenhangt mit CPP und OOP erst einmal die Definition aus z.B. dem Informatik-Handbuch verstehe und erst wenn jemand Begriffe wie statische Polymorphie, ad hoc Polymorphismus, parametrischer Polymorphismus, usw. ... gebraucht, dann schalte ich um auf die vorher genannte Systematik in der dann auch überladenen Funktionen ad hoc, statisch oder compile-time polymorphes Verhalten zugestanden wird.
Gruß
-
vic1986 schrieb:
Wird der Begriff frei, also ohne Zusätze, im Zusammenhang mit OOP und C++ verwendet, was bei der (erdrückenden) Mehrheit der Autoren der Fall ist, dann geht es immer um dynamische Bindung. So wird der Begriff im Allgemeinen auch verstanden.
Mit "im Allgemeinen" würde ich nach so einer langen Diskussion vorsichtiger umgehen - wenn ich es richtig verstehe, ist das analog zu: Ein Auto ist ein Mercedes, es sei denn, es wird auch von BMWs, VWs etc. gesprochen?
Wenn dynamische Bindung gemeint ist, kann man sie auch so bezeichnen - hat man mehrere Begriffe exakt das Gleiche, so sind alle diese Begriffe bis auf einen überflüssig.
-
Es gibt natürlich ältere Definitionen von polymorphen Verhalten bzw. Polymorphismus in denen überladene Funktionen dann z.B. in der Kategorie ad hoc polymorphism bzw. static polymorphism auftauchen. Alle Autoren (z.B. Herb Sutter, Scott Meyers, ...), die den Begriff auf diese Weise verwenden, unterscheiden aber auch klar, indem sie die entsprechenden Zusätze verwenden (ad hoc, static, compile-time, run-time, ...)
Polymorphie:={ad hoc,static,compile-time,run-time}
Das sind alles untermengen, und natürlich sprechen die Authoren nur von der Untermenge, die sie gerade meinen. Wenn man ein Konzept vorstellt, nennt mans eben beim namen.
Wird der Begriff frei, also ohne Zusätze, im Zusammenhang mit OOP und C++ verwendet, was bei der (erdrückenden) Mehrheit der Autoren der Fall ist, dann geht es immer um dynamische Bindung. So wird der Begriff im Allgemeinen auch verstanden.
compile-time Polymorphie ist auch ein relativ "neues" Konzept in C++ oder in der Programmierung ansich. Die meisten authoren kennen eben nur den "alten" Polymorphiebegriff, und benutzen ihn so. Dass sich da vielleicht inzwischen was geändert hat, dass die Welt größer wurde, ist bei manchen Authoren vielleicht noch nicht so durchgesickert(oder die Bücher sind schlicht zu alt, oder es geschah aus didaktischen gründen, oder...).
Dass dies so ist, verwundert einen auch nicht. Ich seh inzwischen immer malwieder C++ Code aus anderen projekten durch, und in vielen kommt nicht ein template oder ähnliche Konstrukte vor. Da wird C++ wie Java oder C mit Klassen programmiert, und natürlich hat dort eine Unterscheidung zwischen verschiedenen Polymorphieformen keinen Sinn, weil es für diese Programmierer scheinbar alles was über den Java horizont hinaus geht nicht gibt.//edit btw:
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. ...)
Balzert hier als kompetenz genannt? Hier in der C++ hochburg? reicht es nicht, dass ich den bereits als dozenten ertragen muss?
-
Ich hab noch nie ein polymorphes Template gesehen, sondern nur Templates die die Polymorphie von den verwendeten klassen oder Operatoren erben. Ich glaub auch nicht, dass es sowas gibt, würde aber gern mal eines sehen.
-
template <class Vehicle> void foo (Vehicle& v) { v.accelerate(); }
mit concepts wird das noch eindeutiger
template <Vehicle vehicle_t> void foo (vehicle_t& v) { v.accelerate(); }
sprich: alles, was ein vehicle ist, kann beschleunigt werden; egal ob das jetzt ein auto, ein schiff oder ein boot ist.
-
Urab schrieb:
Ich hab noch nie ein polymorphes Template gesehen, sondern nur Templates die die Polymorphie von den verwendeten klassen oder Operatoren erben. Ich glaub auch nicht, dass es sowas gibt, würde aber gern mal eines sehen.
Per Definition *sind* Templates das, was „parametrische Polymorphie“ genannt wird.
-
otze schrieb:
... Balzert hier als kompetenz genannt? Hier in der C++ hochburg? reicht es nicht, dass ich den bereits als dozenten ertragen muss?
...
Dann habe ich aber eine Vision. Ich sehe einen Besuch in der Sprechstunde und die Klärung der Angelegeheit mit Hilfe akademischer Kompetenz von höchster Stelle.
-
camper schrieb:
... Ein Auto ist ein Mercedes, es sei denn, es wird auch von BMWs, VWs etc. gesprochen? ...
Ja, so sehe ich das. Wenn in einem C++ Buch von Polymorphie gesprochen wird und es ist nicht explizit die geschilderte Systematik erwähnt, dann ist immer der spezielle Begriff gemeint.
-
So ein Sch***,
Da gibts noch nicht mal eindeutige Definitionen der Begriffe.
Wie soll man da was Klares lernen?
Also muss ich mich nach der Version meines Dozenten richten.Es sieht auch so aus, als hätte sich der Begriff Polymorphie innerhalb einer
Zeitspanne gändert. Was vor xx jahren noch eine genaue Beschreibung hatte, ist
nun Mehrdeutig zu verstehen.Naja, dann halt ich mich erstmal an die Weisheiten meines Profs.
Der wird ja bestimmt mehrere Definitionen kennen, da er ja schon zig Jahre C / C++ lehrt.
-
Quellcode schrieb:
So ein Sch***,
Da gibts noch nicht mal eindeutige Definitionen der Begriffe.Das ist leider bei enorm vielen Begriffen in der EDV so. Nicht mal „OOP“ ist eindeutig definiert. Daher fängt jeder Wissenschaftler, der etwas echtes veröffentlichen möchte, auch erst mal an, seitenlang Begriffe zu klären. Riesige Zeitverschwendung.
-
Quellcode schrieb:
Naja, dann halt ich mich erstmal an die Weisheiten meines Profs. Der wird ja bestimmt mehrere Definitionen kennen, da er ja schon zig Jahre C / C++ lehrt.
In der Regel wirst du davon ausgehen können, das er genau eine Definition kennt. Die meisten Dozenten lernen (meiner Erfahrung nach) genau einmal und der Stand hat dann für sie Gültigkeit (im schlimmsten Fall bis zur Pension).
Im Studium ist es tatsächlich so das man lieber die Definition eines Dozenten lernen sollte (ob richtig oder nicht).
cu André
-
asc schrieb:
Die meisten Dozenten lernen (meiner Erfahrung nach) genau einmal und der Stand hat dann für sie Gültigkeit (im schlimmsten Fall bis zur Pension).
Na, das sind die Negativbeispiele. Jeder halbwegs interessierte Forscher bildet sich ständig weiter. Die Leute existieren ja nicht nur als Lehrer sondern haben in erster Linie eine wissenschaftliche Berufung.
-
Konrad Rudolph schrieb:
asc schrieb:
Die meisten Dozenten lernen (meiner Erfahrung nach) genau einmal und der Stand hat dann für sie Gültigkeit (im schlimmsten Fall bis zur Pension).
Na, das sind die Negativbeispiele. Jeder halbwegs interessierte Forscher bildet sich ständig weiter. Die Leute existieren ja nicht nur als Lehrer sondern haben in erster Linie eine wissenschaftliche Berufung.
Oder die Wissenschaftler meinen, dass es nicht wirklich Polymorphie ist, obwohl es eine Sprache gibt in der es aus Marketinggründen so genannt wird.
-
Vielen Dank für die zahlreichen Antworten.
Also wie mir scheint, kann man nicht genau sagen, ob Überladen nun dazugehört oder nicht.Konrad Rudolph schrieb:
Squall schrieb:
Hallo,
ich bin momentan bei Polymorphis in C++. Es scheint aber sehr vielseitig zu sein.
Ist es quasi per Definition: „Polymorphie“ lässt sich (lose) als „Vielseitigkeit“ übersetzen. Abgesehen davon ist das deutsche Wort nicht „Polymorphismus“ sondern eben „Polymorphie“.
Wieso schreiben dann so viele "Polymorphismus" und nicht Polymorphie, obwohl sie im deutschen Sprachraum leben?
-
Vieleicht weil sie selber nicht wissen das es falsch ist
-
Squall schrieb:
Wieso schreiben dann so viele "Polymorphismus" und nicht Polymorphie, obwohl sie im deutschen Sprachraum leben?
Warum benutzen unzählige leute Wörter, wie "Alda" und "Ey" wahllos im Satz?
-
http://de.wikipedia.org/wiki/Polymorphismus
Als Polymorphismus [...]
Der Begriff Polymorphismus ist abgeleitet von der latinisierten Form des griechischen Wortes πολυμορφισμός, „die Vielgestaltigkeit“.
...
Synonyme: Polymorphie, Heteromorphie, diskontinuierliche Vielgestaltigkeit
-
Quellcode schrieb:
So ein Sch***,
Da gibts noch nicht mal eindeutige Definitionen der Begriffe.
Wie soll man da was Klares lernen?
Also muss ich mich nach der Version meines Dozenten richten.Namen sind Schall und Rauch. Wenn man studiert, muss man sowieso immer die Version des Dozenten lernen - man lernt für Noten nicht fürs Leben.
Aber wenn man sich weiterbilden will dann geht es das Konzept zu verstehen. Und laufzeit Polymorphie ist sicher die gängigste. Später lernt man dann soweiso von selbst dass man das ganze mit Templates 1:1 auch modellieren kann und bald merkt man, dass es mit normalen funktionen und funktionsparametern auch das selbe ist. Irgendwann lernt man es eh von selbst wenn man sich weiterbilden will.
Das Problem ist, man kann eine genaue Definition verwenden: wie eben zB:
Objekte die die selbe Nachricht bekommen verhalten sich unterschiedlich.Das schliesst eben zB die WinAPI mit ihren Messages ein. Es ist halt sehr weit gefasst, aber es ist ja auch nichts konkretes sondern eher ein abstraktes konzept oder ein denkmuster wenn man so will. ähnlich wie die frage: was ist zärtlichkeit oder was ist spass. das sind ebenfalls abstrakte nomen - sie exakt zu definieren wird nie 100% passen, es geht dabei vielmehr darum das konzept zu verstehen.
-
Shade Of Mine schrieb:
Und laufzeit Polymorphie ist sicher die gängigste. Später lernt man dann soweiso von selbst dass man das ganze mit Templates 1:1 auch modellieren kann
Nicht wirklich, nur dann, wenn du laufzeit Polymorphie da verwendest, wo du sie eigentlich garnicht brauchst.