Diskussion:Polymorphie (Programmierung)

Letzter Kommentar: vor 11 Jahren von Sebastian.Dietrich in Abschnitt Wikipedia - Ein Tutorial

Aus Polymorphismus

Bearbeiten

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)) Beantworten

Programmbeispiel

Bearbeiten

Kann 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)) Beantworten

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)Beantworten

Anmerkungen

Bearbeiten

Polymorphismus 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)) Beantworten

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)) Beantworten

Verstaendlichkeit

Bearbeiten

Verstaendlichkeit I

Bearbeiten

Verstaendlichkeit, 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)) Beantworten
Ja Danke, der Artikel ist bis auf ein paar Kleinigkeiten jetzt sehr viel besser :-)
-- Sparti 00:32, 30. Apr 2005 (CEST)

Verständlichkeit II

Bearbeiten

Der 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)) Beantworten

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)) Beantworten
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)Beantworten

Verstaendlichkeit III

Bearbeiten

Hallo 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)) Beantworten

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)) Beantworten
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)Beantworten

Polymorphie oder Polymorphismus?

Bearbeiten

Die Ü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)Beantworten
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)Beantworten

OOP: polymorphie?

Bearbeiten

wenn 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)) Beantworten

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)Beantworten

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)Beantworten

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)Beantworten
Bearbeiten

URL mit anschaulichem Beispiel - ob mans als Nichtprogrammierer versteht, weiß ich nicht

Bearbeiten

http://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)) Beantworten

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)Beantworten

Polymorphie in expliziten Programmiersprachen

Bearbeiten

Der 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)) Beantworten

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)Beantworten

Frage

Bearbeiten

Hi,
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)) Beantworten

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)Beantworten

Inklusionspolymorphie - Abschnitt wertlos!

Bearbeiten

Im 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)) Beantworten

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)Beantworten
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)Beantworten

Polymorphismus höherer Ordnung?

Bearbeiten

Was ist mit "Rank-k polymorphism"? Wird gar nicht erwaehnt bisher ... -- 87.187.103.51 19:08, 23. Jun. 2009 (CEST)Beantworten

Wikipedia - Ein Tutorial

Bearbeiten

HI,

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)Beantworten

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)Beantworten
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)Beantworten
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)Beantworten