Ich habe mir andere Definitionen und Erklärungen angesehen und keine davon befriedigt mich. Ich möchte sehen, ob jemand Polymorphismus in höchstens zwei Sätzen definieren kann, ohne Code oder Beispiele zu verwenden. Ich möchte nicht hören, dass Sie eine Person / ein Auto / einen Dosenöffner haben ... oder wie das Wort abgeleitet wird (niemand ist beeindruckt, dass Sie wissen, was Poly und Morph bedeuten). Wenn Sie ein sehr gutes Verständnis für Polymorphismus haben und gute Englischkenntnisse haben, sollten Sie in der Lage sein, diese Frage in einer kurzen, wenn auch dichten Definition zu beantworten. Wenn Ihre Definition den Polymorphismus genau definiert, aber so dicht ist, dass ein paar Überlesungen erforderlich sind, dann ist das genau das, wonach ich suche.
Warum nur zwei Sätze? Weil eine Definition kurz und intelligent ist. Eine Erklärung ist lang und enthält Beispiele und Code. Hier finden Sie Erklärungen (die Antwort auf diesen Seiten ist für meine Frage nicht zufriedenstellend):
Polymorphismus vs Überschreiben vs Überladen
Versuchen Sie, Polymorphismus so einfach wie möglich zu beschreiben
Warum stelle ich diese Frage? Weil mir dieselbe Frage gestellt wurde und ich feststellte, dass ich keine zufriedenstellende Definition finden konnte (nach meinen Standards, die ziemlich hoch sind). Ich möchte sehen, ob einer der großen Köpfe auf dieser Seite dies kann.
Wenn Sie die Zwei-Satz-Anforderung wirklich nicht erfüllen können (es ist schwierig, ein Thema zu definieren), ist es in Ordnung, wenn Sie darüber nachdenken. Die Idee ist, eine Definition zu haben, die tatsächlich definiert, was Polymorphismus ist und nicht erklärt, was er tut oder wie man ihn verwendet (den Unterschied erkennen?).
quelle
Antworten:
Der Polymorphismus ermöglicht den Ausdruck einer Art von Vertrag, wobei möglicherweise viele Typen diesen Vertrag (ob durch Klassenvererbung oder nicht) auf unterschiedliche Weise implementieren, jeweils entsprechend ihrem eigenen Zweck. Code , der diesen Vertrag verwendet, sollte sich (*) nicht darum kümmern müssen, um welche Implementierung es sich handelt, sondern nur darum, dass der Vertrag eingehalten wird.
(*) Im Idealfall jedenfalls - offensichtlich hat der aufrufende Code ziemlich oft sehr bewusst die entsprechende Implementierung gewählt!
quelle
Obst kann in der Regel gegessen werden, aber verschiedene Obstsorten werden auf unterschiedliche Weise gegessen. Ein Apfel, der eine Frucht ist, kann gegessen werden (weil es eine Frucht ist). Eine Banane kann auch gegessen werden (weil es auch eine Frucht ist), aber anders als ein Apfel. Sie schälen es zuerst.
Nun, zumindest tue ich das, aber ich bin in gewisser Weise komisch, also was weiß ich.
Dies zeigt Vererbung (Obst kann gegessen werden), Polymorphismus (etwas, das Obst isst, kann alle Arten von Obst essen) und Einkapselung (eine Banane hat eine Haut).
Im Ernst, Objektvererbung, Polymorphismus, Kapselung, virtuelle Dinge, abstrakte Dinge, private Dinge, öffentliche Dinge, all dies sind harte Konzepte. Wenn jemand unbedingt eine 2-Satz-Definition davon haben möchte, markieren Sie die Frage bitte als Code-Golf-Variante, da zwei solche Sätze so knapp sein müssen, dass Sie nicht genug darüber lernen, wenn Sie nicht wissen, was es bereits ist es, um zu wissen, worüber Sie mehr erfahren müssen.
quelle
Polymorphismus deklariert eine einheitliche Schnittstelle, die nicht typenbewusst ist, und überlässt Implementierungsdetails konkreten Typen, die die Schnittstelle implementieren.
quelle
Wikipedia: Polymorphismus ist eine Programmiersprachenfunktion, mit der Werte verschiedener Datentypen über eine einheitliche Schnittstelle verarbeitet werden können. Ziemlich einfach für mich.
quelle
Tatsächlich gibt es mehrere Formen des Polymorphismus und es gibt einige Kontroversen darüber; Möglicherweise sehen Sie sogar CS-Professoren, die es nicht richtig definieren können. Mir sind drei Arten bekannt:
Ad-hoc-Polymorphismus (sieht aus wie eine Ente und geht wie eine Ente => ist eine Ente). Kann zum Beispiel in Haskell und Python gesehen werden.
generischer Polymorphismus (wobei ein Typ eine Instanz eines generischen Typs ist). Kann zum Beispiel in C ++ gesehen werden (Vektor von int und Vektor von string haben beide eine Elementfunktionsgröße).
Subtyp-Polymorphismus (wobei ein Typ von einem anderen Typ erbt). Kann in den meisten OO-Programmiersprachen gesehen werden (dh Dreieck ist eine Form).
quelle
Ich verstehe wirklich, warum Sie diese Frage stellen. Ich verstehe Polymorphismus, aber ich war bei einem Vorstellungsgespräch und wurde gebeten, eine kurze und klare Definition des Polymorphismus zu geben. Da ich keine klare und kurze Definition geben konnte, begann ich darüber nachzudenken und hier ist meine Definition:
Die Fähigkeit von Objekten eines Typs, ein und dieselbe Schnittstelle zu haben, aber unterschiedliche Implementierung dieser Schnittstelle.
quelle
Definition :
Polymorphismus ist ein 10-Dollar-Wort für eine 1-Dollar-Idee - wenn ich darum bitte, dass etwas getan wird, ist es mir egal, wie es erreicht wird, solange das Endergebnis angemessen ist. Solange der Service korrekt bereitgestellt wird, ist mir die Implementierung egal .
Diskussion
Während es in der Softwareentwicklung häufig verwendet wird, insbesondere in Systemen, die nach objektorientierten Prinzipien entwickelt wurden, ist Polymorphismus grundsätzlich ein Prinzip der realen Welt und sollte in realen Begriffen definiert werden, nicht in technologischen Begriffen.
Beispiele
Wenn ich telefonieren möchte, nehme ich ein Telefon, wähle eine Nummer und spreche mit der Partei am anderen Ende. Es ist mir egal, wer das Telefon hergestellt hat, welche Technologie es verwendet, ob es verkabelt, drahtlos, mobil oder VOIP ist oder ob es unter die Garantie fällt.
Wenn ich ein Dokument drucken möchte, drucke ich es. Die Implementierungssprache, die Druckermarke, der Verbindungsstil, die Wahl des Verbrauchsmaterials oder die Papierqualität sind mir egal.
quelle
Encapsulation
michMehrere Implementierungen derselben Schnittstelle.
Beispiel: Viele Telefonmodelle implementieren die Ziffernblockschnittstelle.
quelle
Polymorphismus ist eine objektorientierte Strategie, die beim Entwerfen von Objektmodellen verwendet wird, um den Code zu vereinfachen. Im Kern ist Polymorphismus die Fähigkeit, zwei ähnliche, aber unterschiedliche Objekte zu definieren und die beiden Objekte dann so zu behandeln, als wären sie gleich.
Ok das ist schwer ....
quelle
Ich dachte nur, ich würde meine eigene Interpretation dessen hinzufügen, was Polymorphismus ist: Ganz allgemein ist Polymorphismus der Akt der Bereitstellung einer einzigen Schnittstelle für Entitäten verschiedener Typen .
Das ist ziemlich allgemein gehalten, aber nur so kann ich mir vorstellen, alle drei Arten von Polymorphismen, die ich kenne, zu verpacken: Ad-hoc , parametrisch und Subtyp . Ich werde weiter unten näher darauf eingehen und die Polymorphismustypen alphabetisch nach Namen sortieren. Derjenige , an dem Sie interessiert sind, ist höchstwahrscheinlich der Subtyp-Polymorphismus , der der letzte ist.
Ad-hoc-Polymorphismus
Ad-hoc-Polymorphismus ist der Vorgang, bei dem mehrere Implementierungen derselben Methode für verschiedene Parametertypen bereitgestellt werden. Im OOP wird dies allgemein als Methodenüberladung bezeichnet . Beispielsweise:
Beide
format
Methoden teilen sich eine einzige Schnittstelle , arbeiten jedoch mit Entitäten unterschiedlichen Typs .Parametrischer Polymorphismus
Parametrischer Polymorphismus ist der Vorgang, bei dem eine Klasse (oder Methode) an einem Typ arbeitet, der selbst ein Parameter der Klasse (oder Methode) ist. Es wird oft als Generika bezeichnet .
Zum Beispiel Java
List[T]
erwartet einen ParameterT
zur Instanziierungszeit, und dieser Parameter definiert den Typ des resultierenden Objekts.Hinweis für Puristen, die ich absichtlich ignoriere rohe Typen , da ich das Gefühl habe, dass sie in diesem Zusammenhang nur das Wasser trüben würden.
List[String]
undList[Date]
teilen Sie eine einzelne Schnittstelle , aber arbeiten Sie an (und sind) verschiedenen Typen .Subtyp-Polymorphismus
Subtyp-Polymorphismus ist wahrscheinlich das, was Sie ursprünglich in Ihrer Frage gemeint haben: Es handelt sich um die Bereitstellung einer einzigen Schnittstelle für mehrere Implementierungen desselben Typs.
So verwenden Sie das übliche Beispiel:
Animal
Stellt einen Vertrag bereit, den alle Implementierungen einhalten müssen.Dog
ist einAnimal
und unterstützt als solches alle Operationen, dieAnimal
deklarieren. Nach dem Liskov-Substitutionsprinzip können Sie auf diese Weise eine Instanz verwenden,Dog
bei der eine Instanz vonAnimal
erwartet wird (aber nicht umgekehrt).Wenn
Cat
undDog
beide Unterklassen von sindAnimal
, teilen sie sich eine einzige Schnittstelle , sind jedoch tatsächlich unterschiedliche Typen .Ich gehe hier ein bisschen tangential vor, aber der Subtyp-Polymorphismus ist (glaube ich) der einzige, der das Überschreiben erlaubt : das Neudefinieren des Verhaltens einer von einer übergeordneten Klasse definierten Methode. Dies wird oft mit Überladung verwechselt, die, wie wir zuvor gesehen haben, eine Art Polymorphismus ist und tatsächlich keine Unterklassen benötigt (und auch keine Klassen benötigt).
quelle
Es scheint, dass hier die besten Definitionen bereitgestellt werden. Lassen Sie mich also bitte meine zwei Cent hinzufügen , nur für andere Beobachter. Ich hoffe es könnte mehr helfen.
Es gibt zwei Arten von Polymorphismus:
Das ist einfach Methodenüberladung und Bedienerüberladung
Die erste Amtszeit wird von der Java- und C ++ - Terminologie geerbt.
Aber in der .NET- Terminologie wird nur die zweite ( ich meine Laufzeitpolymorphismus ) wirklich als Polymorphismus angenommen und einfach als Polymorphismus bezeichnet .
Und soweit ich weiß, gibt es drei Methoden zur Implementierung des ( Laufzeit- ) Polymorphismus .
Ein einfaches Beispiel für einen schnittstellenbasierten Polymorphismus:
Ausgabe:
quelle
Polymorphismus ist eine Software-Codierungsabstraktion, bei der mehrere verschiedene zugrunde liegende Entitäten (normalerweise Daten, aber nicht immer) eine gemeinsame Schnittstelle haben, über die sie zur Laufzeit identisch aussehen und handeln können. Wir verwenden dies als Entwicklungstechnik, um konsistentes Verhalten über einen weiten Bereich ähnlicher, aber nicht identischer Instanzen mit einer absolut minimalen Implementierung zu erzwingen und so die Erwartung von Fehlern und Inkonsistenzen zu verringern.
Paul.
quelle
Polymorphismus == mehrere Klassen + gleiche Methodensignaturen + klassenspezifisches Verhalten.
quelle
Mehrere Formen eines einzelnen Objekts werden als Polymorphismus bezeichnet.
quelle
Polymorphismus
Verschiedene Objekte können auf unterschiedliche Weise auf dieselbe Nachricht reagieren und es Objekten ermöglichen, miteinander zu interagieren, ohne ihren genauen Typ zu kennen.
Über: http://www.agiledata.org/essays/objectOrientation101.html
quelle
Polymorphismus ist die Fähigkeit eines Objekts, bei demselben Aufruf anders zu erscheinen und sich anders zu verhalten. Beispiel: Jedes Tier erscheint und klingt anders (wenn Sie es treffen :))
quelle
Polymorphismus ist eine Funktion von Programmiersprachen, mit der ein Objekt als Instanz seines Supertyps behandelt werden kann.
quelle
Eine Reihe von analogen Operationen für verschiedene Typen mit einem einzigen Namen versehen. Wenn es gut gemacht ist, ist die Analogie offensichtlich, z. B. das "Hinzufügen" von Zahlen arithmetisch und das "Hinzufügen" von Zeichenfolgen durch Verkettung (die ihre Längen summiert).
quelle
Dies ist die Definition, der ich immer gefolgt bin:
Zwei Objekte sind zwischen ihnen polymorph (in Bezug auf ein bestimmtes Protokoll), wenn beide auf dieselben Nachrichten mit derselben Semantik antworten.
Beim Polymorphismus geht es um Nachrichten, darum, in der Lage zu sein, denselben Satz von Nachrichten mit derselben Semantik zu beantworten.
Wenn zwei Objekte auf leer reagieren können? Aber die Semantik der Nachricht ist anders. Dann sind sie nicht polymorph.
quelle
Polymorphismus auf der unteren Ebene ist die Fähigkeit, Methoden, die von den Implementierern einer Schnittstelle definiert werden, von der Schnittstelleninstanz aus aufzurufen.
quelle
Polymorphismus ist eine Programmierfunktion, mit der ein Objekt viele Typen ('Formen') haben kann. Sie können es als einen dieser Typen behandeln, je nachdem, was Sie tun müssen, ohne die anderen Typen zu kennen oder sich darum zu kümmern.
quelle
Polymorphismus ist eine Sprachfunktionalität, mit der algorithmischer Code auf hoher Ebene für mehrere Datentypen unverändert verwendet werden kann. Und der andere Satz, was auch immer es war ... ;-P.
(Die von C ++ unterstützten Typen sind in meiner Antwort aufgelistet und gegenübergestellt: Polymorphismus in c ++ )
quelle
Das Konzept des Polymorphismus wurde in letzter Zeit zu einem Phänomen. Hier ist die tatsächliche Drift. Runtime definiert, welche Submethode von einer Referenz einer Superklasse aufgerufen werden soll. Was bedeutet nun in der Praxis? Es bedeutet eigentlich nichts. Sie können einfach ohne Polymorphismus codieren. Warum also? Denn wenn wir den Polymorphismus nicht haben, mussten wir uns alle Definitionen der Unterklassenfunktionen merken. Polymorphismus erspart uns dies in der Praxis.
Sie können eine Liste wie folgt definieren:
Wenn Sie jedoch nachsehen
IList
, können Sie von der Benutzeroberfläche profitieren:und verwenden Sie die
IList
Referenz frei. Angenommen, esIList
ist auch in einer anderen Klasse implementiert, können Sie Methoden dieser unbekannten Klasse erneut über verwendenIList
Referenz verwenden, ohne sich an diesen Klassennamen zu erinnern. Wunderbar, nicht wahr?Jetzt kommen weitere wertvolle Informationen:
Java ist standardmäßig polymorph, während .NET und C ++ in MS nicht die Basisfunktion deklarieren müssen
virtual
(und in .NEToverride
Schlüsselwort deklarieren müssen.Es gibt auch zwei integrale Regeln im Polymorphismus. Eine ist die Vererbung (über die Schnittstelle impl. Oder über die Klassenerweiterung) und die andere überschreibt. Ohne Überschreiben gibt es keinen Polymorphismus. Beachten Sie, dass das Überladen von Methoden (immer in einer einzelnen Klasse) auch eine Art "minimalistischer" Polymorphismus ist.
quelle
Für eine bestimmte Methodensignatur werden unterschiedliche Methodenimplementierungen für unterschiedliche, hierarchisch verwandte Klassen ausgeführt.
quelle
Polymorphismus ist die Fähigkeit, verschiedene Klassen zu verwenden, die eine gemeinsame Schnittstelle implementieren (oder eine gemeinsame Basisklasse erweitern), ohne jetzt die spezifische Implementierung zu benötigen, und nur die in der gemeinsamen Schnittstelle verfügbaren Methoden zu verwenden.
Dh: In Java, da sowohl ArrayList als auch LinkedList List implementieren, können Sie, wenn Sie eine Variable als List deklarieren, immer die in List zulässigen Operationen ausführen, unabhängig davon, ob Ihre Variable als ArrayList oder LinkedList instanziiert wurde.
quelle
Entitäten desselben Typs (dh dieselbe Schnittstelle implementiert oder von derselben Klasse abgeleitet) verhalten sich unterschiedlich (unter demselben Methodennamen).
quelle
Ich denke, die Implementierung von Methoden derselben Signatur in verschiedenen Klassen (mit einer Art Vererbungsbeziehung, die entweder Extended oder Implements verwendet) ist Methodenüberschreibung und auch Polymorphismus, da wir auf diese Weise viele Formen derselben Methodensignatur erzielen.
quelle
Ich denke manchmal werden Objekte dynamisch aufgerufen. Sie sind sich nicht sicher, ob das Objekt ein Dreieck, ein Quadrat usw. in einer klassischen Polyform ist. Beispiel.
Um all diese Dinge hinter sich zu lassen, rufen wir einfach die Funktion der abgeleiteten Klasse auf und gehen davon aus, dass die der dynamischen Klasse aufgerufen wird.
Es ist dir egal, ob es sich um ein Quadrat, ein Dreieck oder ein Rechteck handelt. Sie kümmern sich nur um die Gegend. Daher wird die getArea-Methode abhängig vom übergebenen dynamischen Objekt aufgerufen.
quelle
Polymorphismus ist die Fähigkeit einer Funktion, sich automatisch anzupassen, um Eingabedaten verschiedener Datentypen zu akzeptieren. Sie können zwei Double '1.1' und '2.2' hinzufügen und '3.3' oder 'Add' zwei Strings "Stack" und "Overflow" und "StackOverflow" erhalten.
quelle
Polymorphismus ist, wenn verschiedene Objekte auf unterschiedliche Weise auf dieselbe Methode reagieren. Zum Beispiel bewegt sich ein Auto auf der Straße, während eine Person auf der Straße geht. Dies sind zwei Objekte, die auf dieselbe Straße unterschiedlich reagieren.
quelle