Definition: Polymorphie
-
Hallo ihr!
Ich mach es kurz: Stimmt folgender Satz im Bezug auf Polymorhpie?
Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.
Wenn man jetzt z.B. eine Liste grafischer Objekte hat und möchte sie alle zeichnen, dann schickt man an alle Objekte die Botschaft zeichnen. Die Objekte können unterschiedlich sein, d.h. einmal ist es ein Kreis und einmal ein Rechteck. Die unterschiedliche Reaktion bezieht sich darauf, dass das Zeichnen der Objekte selbst unterschiedlich von statten geht. (Ist ja logisch: ein Kreis malt man anders als ein Rechteck)
Viele Grüße
Michael
-
IMO ist das korrekt.
-
***
-
Yo, korrekt.
-
Danke euch!!!
-
Ich benutzte mal frech den Thread hier um keinen neuen erstellen zu müssen, gehört ja auch mit dazu:
Ich suche nach einer kurzen, prägnanten Definition für Polymorphie. Habe bisher diese hier, ist die soweit richtig ? Bin für Vorschläge offenDanke!
Funktionen werden in abgeleiteten Klassen redefiniert und können über einen einheitlichen Aufruf benutzt werden. Dabei wird erst zur Laufzeit entschieden, welche Funktion für welches Objekt aufgerufen wird ("Late Binding").
-
Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.
Wenm man nun unter verschieden Objekte , Objekte aus klassen ohne gemeinsem Basisklasse versteht, welceh jedoch gleiceh funktionen also die gleiche Botschaft empfangen können, spricht man nich von polymporhie
-
BorisDieKlinge schrieb:
Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.
Wenm man nun unter verschieden Objekte , Objekte aus klassen ohne gemeinsem Basisklasse versteht, welceh jedoch gleiceh funktionen also die gleiche Botschaft empfangen können, spricht man nich von polymporhie
-
Der eigentliche Thread ist an die 4 Jahre alt, ich glaube der Threadersteller werden Kommentare nicht mehr so interessieren
Würde mich aber über Kommentare zu meiner Def. freuen. Dannke
xMänneken schrieb:
Funktionen werden in abgeleiteten Klassen redefiniert und können über einen einheitlichen Aufruf benutzt werden. Dabei wird erst zur Laufzeit entschieden, welche Funktion für welches Objekt aufgerufen wird ("Late Binding").
-
Kenner der Ahnung schrieb:
BorisDieKlinge schrieb:
Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.
Wenm man nun unter verschieden Objekte , Objekte aus klassen ohne gemeinsem Basisklasse versteht, welceh jedoch gleiceh funktionen also die gleiche Botschaft empfangen können, spricht man nich von polymporhie
Auch wenn ich Boris widersprechen muss, aber bei dem Thema widerspricht sich irgendwie auch der Wikipedia-Artikel http://de.wikipedia.org/wiki/Polymorphie_(Programmierung). Einerseits:
Die Polymorphie der Objektorientierten Programmierung ist eine Eigenschaft, die immer im Zusammenhang mit Vererbung auftritt.
Andererseits:
Inklusionspolymorphie bezeichnet die Eigenschaft, jede Methode statt auf einem Subtyp auch auf einem Basistypen ausführen zu können.
-
Warum ist das in Deinen Augen ein Widerspruch? Ohne Vererbung hast Du auch keine Sub- und Basistypen.
-
Also für mich ist eine Klasse von der nicht geerbt wurde schon auch eine Basisklasse/typ. Wobei ich zugeben muss, dass ich nicht so der OOP-Mensch bin.
-
Polymorphie im reinen OO-Sinn ist halt etwas engstirnig. Da braucht man plötzlich Klassen und Vererbung.
Abe die Definition "Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion." ist einfach super. Da gibt es nichts daran auszusetzen.
Je nach Sprache brauche ich eine gemeinsame Basisklasse um die Botschaft senden zu können - aber wie ich die Botschaft Sende hat ja mit polymorphie nicht viel zu tun.
-
BorisDieKlinge schrieb:
Zitat:
Gleiche Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.Wenm man nun unter verschieden Objekte , Objekte aus klassen ohne gemeinsem Basisklasse versteht, welceh jedoch gleiceh funktionen also die gleiche Botschaft empfangen können, spricht man nich von polymporhie
==
Die Polymorphie der Objektorientierten Programmierung ist eine Eigenschaft, die immer im Zusammenhang mit Vererbung auftritt.
= true
class Auto{ void GibGas(double Pedaldruck); }; class GasTank{ void GibGas(double Menge); };
zwei total verscheiden klassen die nicht miteinander zu tun haben, aber die gleiche botschaft annehmen können... NIX POLYMORPHY
-
BorisDieKlinge schrieb:
class Auto{ void GibGas(double Pedaldruck); }; class GasTank{ void GibGas(double Menge); };
zwei total verscheiden klassen die nicht miteinander zu tun haben, aber die gleiche botschaft annehmen können... NIX POLYMORPHY
Das ist, als würdest du sagen, Briefe die von Außen gleich aussehen, seien auch die gleichen Briefe. Aber vielleicht sollte man gleich
Dieselbe Botschaft an verschiedene Objekte ergibt unterschiedliche Reaktion.
sagen. Dann hast du es schwerer mit deiner Interpretation
-
Also IMHO hat Polymorphie nichts mit Vererbung zu tun. Vererbung macht es einem nur leicht zu wissen, welche Schnittstelle ein Objekt hat.
In JavaScript, Ruby, Php, usw. hast du z.B. Polymorphie ohne Vererbung. Polymorphie ist einfach nur das man ein Objekt zur Laufzeit austauschen kann. Wenn das neue Objekt nichts mit den Botschaften anfangen kann, gibts halt Exceptions.
Aber ob die Exception zur Compilertime oder zur Runtime auftritt, ist doch nun wirklich egal.
Das ganze wird an einem Beispiel deutlich:
class Auto{ void GibGas(double Pedaldruck); }; class GasTank{ void GibGas(double Menge); }; Auto obj = Auto(); // obj ist nun fuer immer ein Auto, keine Polymorphie // das Beispiel geht in C++ nicht, weil C++ statische Typen hat void* polyobj = new Auto(); // den Typ von polyobj kann man austauschen polyobj = new GasTank(); polyobj = new IrgendwasMitGas(); // .... polyobj->GibGas(); // der Typ von polyobj kann erst zur Laufzeit bestimmt werden = Polymorphie
-
byto schrieb:
Ohne Vererbung hast Du auch keine Sub- und Basistypen.
Wieso nicht?DEvent schrieb:
Polymorphie ist einfach nur das man ein Objekt zur Laufzeit austauschen kann.
Erläutere dann bitte den Begriff "Kompilationszeit-Polymorphie".
------
Wenn man über Polymorphie redet ist es immer wichtig zu wissen, welchen Hintergrund derjenige hat, mit dem man redet. Kommt er aus der objektorientierten Ecke, wird er inclusion Polymorphie meinen. Kommt er aus der funktionalen Ecke wird er parametrische Polymorphie meinen.
-
Naja Java hat immer seine eigene Interprettion von Begriffen..^^ Im Prinzip hat es schon was mit der austauschbarkeit von objekten zu tun, aber die austauschbaren objekten haben trozdem meisten eigentlich immer gemeinsamkeiten (Schnittstellen), welche über die Basisklases definiert werden..
Wäre schlechter Stil...
Oder wer von euch hat bspw. einen Kontainer von Objekten , deren Klassen nich von ner basisklasse erben?
-
BorisDieKlinge schrieb:
Oder wer von euch hat bspw. einen Kontainer von Objekten , deren Klassen nich von ner basisklasse erben?
Ich.
In PHP/Ruby/Python zB.Das Problem ist, dass du dir zuviele Gedanken über das "wie sende ich die Botschaft" machst. Das ist nebensache. Worum es geht ist "wie reagiert der Empfänger".
In Java brauche ich eine gemeinsame Basisklasse um die Botschaft senden zu können - aber das Senden ist aus Sicht der Polymorphie uninteressant. In C++ hat man zB statische Polymorphie mit Templates - da gibt es nie eine gemeinsame Basisklasse. Und Sprachen wie JavaScript haben zB keine Vererbung...
-
Irgendwie habe ich Schwierigkeiten mit dem Begriff "Kompilationszeit-Polymorphie". Bezieht sich das auf Templates?
Kannst du ein Beispiel dafuer bringen?