Diskussion:Polymorphie (Programmierung)
In der Informatik bezeichnet man mit Polymorphismus eine besondere Eigenschaft von Variablen in einer objektorientierten Programmiersprache. Um von Polymorphismus sprechen zu können, muss eine Variable zu verschiedenen Zeitpunkten Instanzen verschiedener Klassen speichern können. Dies ist in der Regel so realisiert, dass eine Variable Instanzen vom Typ einer Klasse oder einer ihrer Unterklassen speichern kann. Gemeinsam mit dem dynamischen Binden bildet Polymorphismus die Grundlage für eine programmiersprachliche Umsetzung des Substituierbarkeitsprinzips. (nicht signierter Beitrag von Magnus (Diskussion | Beiträge) 22:39, 26. Jul. 2004 (CEST))
Programmbeispiel
BearbeitenKann einer ein Programmbeispiel geben, in dem der Nutzen von Polymorphie ersichtlich wird? Danke, --Abdull 13:28, 18. Feb 2005 (CET)
-- Equality and Ordered classes ---------------------------------------------
An dem folgendem Beispiel (einem Codefragment aus der Prelude von Hugs98) kann man recht gut sehen, dass Polymorphie sinnvoll einsetzen lässt. Hier wird parktisch die Vergleichbarkeit von int, float, double und char. Zudem ist es sogar recht wichtig, sonst müsste man für jeden Typ alles neu implementieren. Vielleicht trägt das ja ein bissel zum Verständis bei :-)?
class Eq a where
(==), (/=) :: a -> a -> Bool -- Minimal complete definition: (==) or (/=) x == y = not (x/=y) x /= y = not (x==y)
class (Eq a) => Ord a where
compare :: a -> a -> Ordering (<), (<=), (>=), (>) :: a -> a -> Bool max, min :: a -> a -> a -- Minimal complete definition: (<=) or compare -- using compare can be more efficient for complex types compare x y | x==y = EQ | x<=y = LT | otherwise = GT x <= y = compare x y /= GT x < y = compare x y == LT x >= y = compare x y /= LT x > y = compare x y == GT max x y | x <= y = y | otherwise = x min x y | x <= y = x | otherwise = y
--NormiDz 18:19, 11. Aug 2005 (CET) (unter falschem Namen signierter Beitrag von 212.91.238.48 (Diskussion) 18:18, 11. Aug. 2005 (CEST))
- Zur weiteren Erläuterung der Sinnhaftigkeit der Polymorphie lässt sich noch folgendes sagen.
- Ad-hoc-Polymorphie dient in der Regel dazu sich nicht an allen Stellen Gedanken über den Typ machen zu müssen.
- Universelle Polymorphie erlaubt, dass für verschieden Typen der gleiche Code ausgeführt wird. So sind z.B. viele Listenoperationen, wie das Bestimmen der Länge einer Liste, vom Typ der Listenelemente unabhängig.
- hth
- --Gar kein name 18:22, 15. Feb. 2007 (CET)
Anmerkungen
BearbeitenPolymorphismus ist nicht nur ein Konzept der objektorientierten Programmierung, sondern auch der funktionalen Programmierung und der imperativen Programmierung. In der funktionalen Programmierung spricht man vom parametrischen Polymorphismus. So ist eine Funktion, welche die Länge einer Liste berechnet, in dem Sinne polymorph, als der Typ t der Listenelemente keine Rolle spielt. Es kann sowohl die Länge einer Liste an ganzen Zahlen, als auch an reellen Zahlen, einer Liste an Listen, etc berechnet werden. Für die Funktion length zeigt hugs (haskell user gopher system) beispielsweise folgenden Typ an:
Prelude> :type length length :: [a] -> Int
"a" steht hier für eine Typvariable.
In der imperativen Programmierung gibt es natürlich auch das Überladen von Funktionen, welches im Artikel erwähnt wurde. Soweit ich weiß kann man in perl das Symbol "+" für das Zusammenfügen von Strings, wie auch für die Addition von Zahlen verwenden, genauso wie in Java.
Der Artikel sollte also in die allgemeinere Kategorie Programmierung verschoben werden, und dann könnte man den parametrischen Polymorphismus ergänzen. Die im Artikel beschriebene Art des Polymorphismus bezeichnet man auch als "Ad-hoc-Polymorphismus".
Wenn niemand etwas dagegen hat, werde ich das bald machen. (nicht signierter Beitrag von Benedetto (Diskussion | Beiträge) 22:18, 26. Feb. 2005 (CET))
- Im Gegenteil, das klingt sehr interessant und sollte niemandem Vorenhalten werden -)
-- Sparti 09:43, 27. Feb 2005 (CET)
- Der Polymorphismus im Artikel ist nicht (nur) Ad-hoc-Polymorphismus (manchmal gleichgesetzt mit Überladen, aber Cardelli nimmt auch Koersion mit rein). Im Beispiel ist es Inclusion Polymorphismus (auf deutsch Inklusionspolymophismus?). Das ist auch genau die Art von Polymorphismus, der den OO Sprachen eigen ist. Generell hat Polymorphismus aber mit keinem Paradigma an sich zu tun. In seiner momentanen Form ist der Artikel unbrauchbar, find ich. Vielleicht find ich Zeit was daran zu ändern. (nicht signierter Beitrag von 84.133.102.214 (Diskussion) 19:18, 16. Apr. 2005 (CEST))
Verstaendlichkeit
BearbeitenVerstaendlichkeit I
BearbeitenVerstaendlichkeit, der Artikel hat an Verstaendlichkeit verloren. Er mag jetzt fachlich umfassender sein (was sehr lobenswert ist!), er erschliesst sich aber dem fachfremden Leser nicht mehr. Im Falle von Polymorphismus halte ich es aber wichtig, dass auch Schueler und interessierte den Arikel lesen koennen.
Vielleicht kann der unbekannte Author nochmal eine leicht verstaendlich Einfuehrung im Sinne es original Artikels verfassen?
Vielen Dank -- Sparti 12:31, 17. Apr 2005 (CEST)
- Besser so? :) (nicht signierter Beitrag von 84.133.102.47 (Diskussion) 20:32, 17. Apr. 2005 (CEST))
- Ja Danke, der Artikel ist bis auf ein paar Kleinigkeiten jetzt sehr viel besser :-)
- -- Sparti 00:32, 30. Apr 2005 (CEST)
Verständlichkeit II
BearbeitenDer Artikel ist leider nicht verständlich. Ein paar spezielle Polymorphie-Typen anzugeben reicht nicht aus, um Polymorphie zu erklären. Dagegen sind die Erklärungen auf dieser Diskussionsseite klarer, vor allem der Abschnitt am Anfang.
-- DerKalk 19:07, 15. Aug 2006 (GMT) (unter falschem Namen signierter Beitrag von 138.246.7.96 (Diskussion) 19:08, 15. Aug. 2006 (CEST))
- Ich muss mich dem anschließen. Ich kann zwar verstehen, dass es nicht korrekt ist, Polymorphismus auf objektorientierte Sprachen zu beschränken, aber in dieser Form ist der Artikel nur noch für Fachinformatiker von Bedeutung. Ein Schüler, Student, anwendungsorientierter Programmierer oder einfach nur Interessierter wird nach diesem Artikel genauso wenig wissen wie vorher. (nicht signierter Beitrag von 217.248.46.79 (Diskussion) 19:54, 22. Sep. 2006 (CEST))
- Schwer zu sagen, ob dass so ist. Die Aufzählung der unterschiedlichen Arten der Polymorphie liefert zunächst einmal ein Menge an Begriffen. Da muss man dann zwar den Überblick bewahren, aber es ist daran nichts schwer zu verstehen. Die Verwirrrung entsteht wohl eher dadurch, dass Begriffe nicht scharf voneinander abgegrenzt werden. Gerade bei der objekt-orientierten Programmierung, die ja schwer in Mode ist, wird viel Halbverstandenes nachgeplappert. Da werden dann auch schonmal Subtyping und Vererbung über einen Kamm geschert. Da finde ich es doch eher erfrischend, wenn sich dieser Artikel etwas um Genaugkeit und Vollständigkeit bemüht.
- --Gar kein name 18:49, 15. Feb. 2007 (CET)
Verstaendlichkeit III
BearbeitenHallo Autoren des Artikels. Ich finde den Artikel leider kaum verstaendlich. Ich habe selbst Informatik studiert, weiss also worum es geht. Man kann den Artikel hoechstens verstehen, wenn man schon weiss was Polymorphie bedeutet. Kritikpunkte im einzelnen:
- Polymorphie an Hand eines ueberladenen _Operators_ zu erklaeren finde ich weniger geeignet, da dies beim Leser ein sehr praezises Verstaendnis von Datentypen vorraussetzt.
- Die Erklaerung mit einer Notation (String x String -> String), die nur Leute, die selbst studiert haben, verstehen, schliesst jeden, der nicht Informatiker ist aus. Das denke ich war nicht die Absicht der Verfasser.
- Ein UML-Diagramm haette den Sachverhalt ergaenzend erlaeutert.
- Ein etwas lebensnaherers Beispiel waere schoen gewesen, zur Not das unvermeidliche Dreieck-Kreis-Viereck Beispiel.
Gut finde ich, dass unterschiedliche Arten der Polymorphie angesprochen wurden. Ich weiss, kritisieren ist viel einfacher als selbst was machen. Mach ich auch, wenn ich demnaechst Zeit finde.
Gruesse (nicht signierter Beitrag von 84.157.122.32 (Diskussion) 20:40, 15. Mär. 2007 (CET))
- Also ich finde den Artikel eigentlich ganz gut und auch verständlich. Bin allerdings auch Informatik-Student... (nicht signierter Beitrag von 80.139.254.89 (Diskussion) 22:02, 11. Mai 2007 (CEST))
- Mein superguter Programmierungsprofessor beschrieb den deutschen Artikel als „schwierig verständlich oder falsch“. Dies war auch allgemeiner Konsens und fällt auch sonst beim Lesen auf. Schon die Einleitung sollte reformuliert werden. -- Gohnarch░░░░ 08:54, 12. Mai 2009 (CEST)
Polymorphie oder Polymorphismus?
BearbeitenDie Überschrift heisst Polymorphie, im Text kommt aber fast nur der Begriff Polymorphismus vor. Welcher wird jetzt (zumindest im Kontext der Programmierung) häufiger verwendet? Aus meiner Sicht wird häufiger Polymorphismus verwendet, vielleicht wegen der Anlehnung ans Englische (Polymorphism) (Google-Suche: Polymorphismus: 37.100, Polymorphie: 30.200, Polymorphismus+Polymorphie: 1160). Auch beim allgemeinen Begriff "Polymorphismus" befindet sich nur ein redirekt auf "Polymorphie", ohne Erklärung warum. Zumindest sollte hier auf die synonyme Verwendung des Begriffs hingewiesen werden!--Vanda 09:49, 27. Aug 2005 (CEST)
- Es heißt Polymorphie. --Snert 21:20, 9. Sep 2005 (CEST)
- Jope. Und dieser Begriff sollte auch konsequent verwendet werden. Polymorphismus kann allenfalls als Fehlübersetzung aus dem Englischen herhalten.
- --Gar kein name 18:34, 15. Feb. 2007 (CET)
- gudn tach!
- der einzige, der wenigstens im ansatz argumente (in form von zahlen) angegeben hat ist der OP. die beiden antworten sind unbelegte privatmeinungen, die sich durch eine kleine google-books-suche und einen blick in den duden widerlegen lassen. -- seth 14:46, 5. Sep. 2012 (CEST)
OOP: polymorphie?
Bearbeitenwenn man unter objektorientierter programmierung nach "polymorphie" schaut wird man aber eine deutlich andere erklärung finden. das sollte in den artikel aufgenommen werden (nicht signierter Beitrag von 212.100.48.32 (Diskussion) 20:54, 17. Jan. 2006 (CET))
- Das liegt wohl daran, dass der Absatz im OOP-Artikel wenig brauchbar ist. In der OOP wird der Begriff Polymorphie gerne etwas unscharf verwendet. Dabei bräuchte man ihn gar nicht, mit Subtyping und Overriding ist alles hinreichend erklärt. Aber Polymorphie hört sich hakt schick an und deshalb passt's so gut zur OOP.
- --Gar kein name 19:18, 25. Nov. 2007 (CET)
Erklärung?
Bearbeiten(Achtung: der Rückgabetyp muss immer genau der des zweiten Parameters sein)
Diese Anmerkung halte ich für Unsinn, sie sollte entweder erklärt oder gelöscht werden ... das kann nach meinem Wissensstand maximal eine Konvention sein, das "muss" wäre demnach fehl am Platze. Oder kann mich jemand korrigieren? -- Fredpfi 15:51, 16. Jan. 2007 (CET)
- Dem stimme ich zu, dass ist an dieser Stelle ohne weitere Erklärung zu verwirrend. Da dies auch etwas zu speziell für eine Einleitung ist, wäre es unter Beispiel besser anzuführen (als Alternative zur Löschung).
- -- Cl0udy0ne 12:07, 16. Mai 2009 (CEST)
Weblinks
BearbeitenURL mit anschaulichem Beispiel - ob mans als Nichtprogrammierer versteht, weiß ich nicht
Bearbeitenhttp://oszhdl.be.schule.de/gymnasium/faecher/informatik/oop/polymorphie.htm (nicht signierter Beitrag von 217.91.14.235 (Diskussion) 11:08, 19. Jan. 2007 (CET))
- Die dort gemachten Ausführungen zum Thema Polymorphie halte ich nach wie vor für gewagt. Das Beispiel ist brauchbar um Subtyping und overriding zu erklären. An Polymorphie geht's haarscharf vorbei.
- --Gar kein name 18:30, 15. Feb. 2007 (CET)
Polymorphie in expliziten Programmiersprachen
BearbeitenDer Link "Polymorphie in PHP" zur Seite http://www.php-faq.de/q/q-klassen-polymorphie.html ist meiner Meinung nach fehl am Platz, denn auf dieser Seite geht es um Überladung und nicht um Polymorphie. Der Begriff Polymorphie wird dort also falsch verwendet. Die Aussage "PHP unterstützt keine Polymorphie" ist falsch, PHP unterstützt schon Polymorphie, nur eben keine Überladung. (nicht signierter Beitrag von 85.216.70.142 (Diskussion) 20:26, 8. Dez. 2007 (CET))
- Der Weblink "Polymorphie in Delphi" ist m.E. schlecht, da auf der Seite nur Typecasts beschrieben werden, was mit Polymorphie nicht direkt etwas zu tun hat. Die darauf folgende Seite http://www.delphi-treff.de/sprachen/object-pascal/verbergen-ueberschreiben-ueberladen kratzt auch nur am Rande des Themas.
- --85.178.215.153 12:11, 8. Mai 2008 (CEST)
Frage
BearbeitenHi,
mich interressiert folgende Aussage im Text:
- Ein Objekt einer Klasse verweist auf eine polymorphe Struktur, wenn es nicht nur auf Objekte einer Klasse sondern auf Objekte verschiedener Klassen, die von einer gemeinsamen Basisklasse abgeleitet wurden, zeigt.
Heisst es einfach ausgedrückt das diese Art des Polymorphismus (Polymorphie der Struktur) dass, das Objekt sowas wie eine Instanz von verschiedenen Klassen ist? Z.b. Java mäßig: der Fisch Name ist ein objekt das zu Klasse Fisch und zu Klasse Tier gehört? D.h. es hat ein Zeiger der auf beiden Klasen Zeigt?
Danke für s lesen und Antworten :-)
Übrigens ich hab vergessen zu sagen dass, es anscheinend keine Disambugation Seite gibt. Als ich Polymorphismus suchte fand ich nur sachen in zusammenhang mit Biologie oder so (nicht signierter Beitrag von مبتدئ (Diskussion | Beiträge) 23:17, 13. Feb. 2007 (CET))
- Ich denke nicht, dass es sich so verhält. Das Fisch-Objekt (um bei dem genannten Beispiel zu bleiben) ist aus der Klasse Fisch entstanden. Die Klasse Fisch selbst verweist auf ihre Vorfahren zB auch dem Tier. Das heißt, dass innerhalb der Sprache ein Verweis auf die Tatsache: Fisch völlig ausreichend ist. Von der Logik her ist jeder Fisch bereits ein Tier. Welche Methoden eines Tieres die Klasse Fisch dann übernommen hat, liegt allein an der Klasse.
- --Freak1.5 09:09, 14. Feb. 2007 (CET)
Inklusionspolymorphie - Abschnitt wertlos!
BearbeitenIm Abschnitt Inklusionspolymorphie kommt das Wort Inklusionspolymorphie nicht ein einziges mal vor, so dass sich nicht bestimmen lässt was "Inklusionspolymorphie" denn nun eigentlich ist, wenn man es nicht schon weiss. Ist es "Kompilationszeit-Polymorphie", "Laufzeit-Polymorphie", beides, oder nichts von beidem??
Man fragt sich bei dem Abschnitt "Was hat der Text mit der Überschrift zu tun??" Wer sich damit auskennt: Bitte korrigieren. Danke! :) (nicht signierter Beitrag von 62.143.90.14 (Diskussion) 15:24, 11. Nov. 2007 (CET))
- Hm, ja, der Abschnitt taugt nichts. Die Begriffe Kompilations- und Laufzeit-Polymorphie sind mir einigermaßen unbekannt. Die Typüberprüfung kann natürlich statisch (Kompilationszeit) oder dynamisch (Laufzeit) stattfinden. Die Art der Polymorphie danach zu unterscheiden ergibt wenig Sinn. Mit Inklusionspolymorphie hat das erstmal wenig zu tun.
- Bei der Inklusionspolymorphie geht es im Wesentlich darum, dass eine Funktion oder Methode als Eingabe kein Objekt eines bestimmten Typs erwartet, sondern angibt, dass das übergebene Objekt mindestens bestimmte Methoden beherrschen muss. Damit überschneidet sich die Inklusionspolymorphie mit der Breitenregel des Subtypings.
- --Gar kein name 19:18, 25. Nov. 2007 (CET)
- ich habe mal einen Satz hinzugefuegt in der Hoffnung dass hier erweitert wird und der Absatz wenigstens etwas mit der Ueberschrift zu tun hat.
- --JD 14:17, 14. Feb. 2008 (CET)
Polymorphismus höherer Ordnung?
BearbeitenWas ist mit "Rank-k polymorphism"? Wird gar nicht erwaehnt bisher ... -- 87.187.103.51 19:08, 23. Jun. 2009 (CEST)
Wikipedia - Ein Tutorial
BearbeitenHI,
- In dieser Einführung wird die Motivation dahinter verdeutlicht und die verschiedenen Arten der Polymorphie vorweggenommen. Sie werden in den entsprechenden
- Abschnitten genauer erklärt.
Wikipedia ist keine Einführung noch ein Tutorial, entfernen! --Funkenstern (Diskussion) 15:53, 9. Jun. 2013 (CEST)
- Warum willst du die Motivation für Polymorphie nicht erklären? Was meinst du mit "Wikipedia ist keine Einführung" - selbstverständlich ist sie das. Ein Ähnlichzeit zu einem Tutorial kann ich an dem Artikel nicht erkennen. --Sebastian.Dietrich ✉ 08:53, 16. Jun. 2013 (CEST)
- Hallo,
- Natürlich sollte ein gewisser Teil erklärend sein in einer Enzyklopädie, aber man darf dabei nicht vergessen, dass wir die Themen eher generell erklären sollten, für 1. Drücken Sie den Einschaltknopf 2. ::Nehmen Sie den Hörer ab und geben Sie die Nummer ein. Für solche Erklärungen ist de.wikibooks.org zuständig und man sollte den Leuten ja nicht gerade sagen: "Du hast hier ein vollständiges ::Tutorial wie du dein Problem lösen kannst."
- --Funkenstern (Diskussion) 21:57, 23. Jun. 2013 (CEST)
- Da hast du natürlich recht - aber wo in dem Artikel findest du "1. schreiben sie eine abstrakte Klasse 2. schreiben sie Subklassen 3. verwenden sie die Superklasse und schon haben sie Polymorphie..." Ich vermute du meinst den Abschnitt "Einleitung". Der versucht Polymorphie anhand eines (mMn sehr schlechten) Beispieles zu erklären. mMn gehört der Absatz mit einem besseren (standard-) Beispiel versehen - aber löschen würde ich ihn nicht. --Sebastian.Dietrich ✉ 13:08, 7. Jul. 2013 (CEST)