Frage

Ich habe in anderen Definitionen sieht und Erklärungen und keiner von ihnen befriedigt mich. Ich will sehen, ob jemand Polymorphismus in höchstens zwei Sätzen ohne Verwendung eines Code oder Beispiele definieren kann. Ich will nicht zu hören ‚So haben Sie eine Person / Auto / Dosenöffner ...‘ oder, wie das Wort abgeleitet ist (niemand ist beeindruckt, dass Sie wissen, welche Poly und morphen Mittel). Wenn Sie ein sehr gutes Verständnis von dem, was Polymorphismus ist und haben eine gute Beherrschung der englischen Sprache, als Sie sollten diese Frage in kurzer beantworten können, wenn auch dicht, Definition. Wenn Ihre Definition genau Polymorphismus definiert, sondern ist so dicht, dass es ein paar Lese overs erfordert, dann ist das genau das, was ich suche.

Warum nur zwei Sätze? Da eine Definition ist kurz und intelligent. Eine Erklärung ist lang und enthält Beispiele und Code. Schauen Sie hier nach Erklärungen (die Antwort auf diesen Seiten sind nicht zufrieden stellend für meine Frage):

Polymorphismus vs Zwingende vs Overloading
Versuchen Polymorphismus so einfach zu beschreiben, wie Sie können

Warum frage ich diese Frage? Weil ich die gleiche Frage gestellt wurde und ich fand, war ich nicht in der Lage mit einer befriedigenden Definition zu kommen (für meine Verhältnisse, die ziemlich hoch sind). Ich möchte sehen, ob einer der großen Geister auf dieser Seite kann es tun.

Wenn Sie wirklich nicht die zwei Satz Anforderung machen (es ist ein schwieriges Thema definieren), dann fein es ist, wenn Sie über gehen. Die Idee ist, eine Definition zu haben, die tatsächlich definiert, was Polymorphismus ist und erklären nicht, was es tut, oder wie es zu benutzen (die Differenz bekommen?).

War es hilfreich?

Lösung

Polymorphismus ermöglicht den Ausdruck einer Art von Vertrag, mit potenziell viele Arten, diesen Vertrag (entweder durch Klassenvererbung oder nicht) auf unterschiedliche Weise der Umsetzung, die jeweils nach ihren eigenen Zweck. Code mit diesem Vertrag nicht (*) hat, über die Pflege Umsetzung beteiligt ist, nur, dass der Vertrag eingehalten wird.

(*) Im Idealfall sowieso - offensichtlich ziemlich oft der aufrufende Code die entsprechende Implementierung sehr bewusst gewählt hat,

Andere Tipps

Obst kann als allgemeine Regel gegessen werden, aber verschiedene Arten von Obst werden auf verschiedene Weise gegessen. Ein Apfel, der eine Frucht ist, kann gegessen werden (weil es eine Frucht ist). Eine Banane kann auch gegessen werden (weil es ist auch eine Frucht), aber in einer anderen Art und Weise von einem Apfel. Sie ziehen es zuerst.

Nun, zumindest ich, aber ich bin seltsam in einigen Manieren so etwas weiß ich.

Dies zeigt Vererbung (Frucht kann gegessen werden), Polymorphismus (etwas, das Frucht isst alle Arten von Obst essen kann) und Kapselung (eine Banane hat eine Haut).

Im Ernst, Objekt Vererbung, Polymorphismus, Kapselung, virtuelle Dinge, abstrakte Dinge, private Dinge, öffentliche Dinge, das sind alles harte Konzepte. Wenn jemand unbedingt eine 2-Satz Definition dieses dann markieren Sie bitte die Frage als Code-Golf-Variante haben will, weil zwei solche Sätze werden so knapp sein, dass, wenn Sie wissen, was es ist schon werden Sie nicht genug lernen es zu wissen, was Sie über mehr lernen müssen.

Polymorphismus ist eine einheitliche Schnittstelle zu erklären, die sich nicht bewusst ist, geben, Details der Implementierung zu konkreten Typen verlassen, die die Schnittstelle implementieren.

Tatsächlich gibt es mehrere Formen des Polymorphismus und es ist durchaus eine Kontroverse darüber; Sie können sogar CS Professoren sehen, wer es nicht richtig definieren können. Ich bin mir bewusst von drei Arten:

  • Ad-hoc-Polymorphismus (sieht aus wie eine Ente und geht wie eine Ente => ist eine Ente). Kann in Haskell und Python zum Beispiel gesehen werden.

  • generic-Polymorphismus (wo ein Typ eine Instanz einer generischen Typ ist). Kann in C ++ zum Beispiel zu sehen ist (Vektor von int und Vektor der Zeichenfolge, die eine Elementfunktion Größe beide haben).

  • Subtyp Polymorphismus (wo ein Typ von einem anderen Typ erbt). Kann in den meisten OO Programmiersprachen zu sehen ist (das heißt Dreieck ist eine Form).

Wikipedia: Polymorphismus ist eine Programmiersprache Funktion, die Werte verschiedenen Datentypen behandelt werden mit einer einheitlichen Schnittstelle ermöglicht. Ziemlich einfach für mich.

ich wirklich verstehen, warum Sie diese Frage stellen. Ich verstehe, Polymorphismus, aber ich war an einem Vorstellungsgespräch und wurde gebeten, kurze und klare Definition des Polymorphismus zu geben. Weil ich nicht klar und kurze Definition geben könnte ich darüber nachdachte, und hier ist meine Definition:

Die Fähigkeit der Objekte eines Typs ein und dieselbe Schnittstelle zu haben, aber unterschiedliche Implementierung dieser Schnittstelle.

Definition :

Polymorphismus ist ein $ 10 Wort für $ 1 Idee -, dass, wenn ich um etwas bitten zu tun, ist mir egal, wie man es so lange erreicht, wie das Endergebnis geeignet ist. Solange die Service korrekt zur Verfügung gestellt, I do not care über die Implementierung .

Diskussion

Während es allgemein in der Softwareentwicklung verwendet wird, vor allem in Systemen folgende objektorientierte Prinzipien entwickelt, Polymorphismus ist im Grunde ein reale Welt Prinzip und soll in der realen Welt Begriffen, nicht technologisch diejenigen definiert werden.

Beispiele

Wenn ich einen Anruf machen will, ich ein Telefon abholen, eine Nummer wählen und an die Partei am anderen Ende sprechen. Ich kümmere mich nicht darum, wer das Telefon gemacht, welche Technologie verwendet es, ob es verdrahtete, drahtlose, mobile oder VOIP, oder ob es unter Garantie ist.

Wenn ich ein Dokument ausdrucken möchten, ich drucken. Ich kümmere mich nicht um die Umsetzung der Sprache, Marke des Druckers, Stil der Verbindung, die Wahl des Verbrauchs oder Papierqualität.

Mehrere Implementierungen derselben Schnittstelle.

Beispiel: Viele Modelle von Telefon implementieren, um die numerische Tastatur-Schnittstelle

.

Polymorphismus ist eine objektorientierte Strategie verwendet, wenn Objektmodelle entwerfen, zu helfen, den Code zu vereinfachen. An es ist Kern Polymorphismus ist die Fähigkeit, zwei simillar noch verschiedene Objekte zu definieren, und dann zu behandeln die beiden Objekte, als ob sie gleich sind.

Ok das ist schwer ....

Ich dachte, ich würde meine eigene Interpretation hinzufügen, was Polymorphismus ist: Sehr allgemein, Polymorphismus ist der Akt der Bereitstellung einer einzige Schnittstelle zu Einheiten von verschiedene Typen .

Das ist ziemlich generisch, aber das ist die einzige Art, wie ich mir vorstellen kann, alle drei Arten von Polymorphismen zu wickeln Ich weiß über: ad hoc parametrischer und Subtyp . Ich werde weiter unten im Detail gehen, haben und Polymorphismus Typen nach Namen sortiert, alphabetisch. Diejenige, die Sie interessiert sind, auf höchstwahrscheinlich Subtyp-Polymorphie , die die letzte ist.

Ad-hoc-Polymorphismus

Ad-hoc-Polymorphismus ist die Tat von mehreren Implementierungen der gleichen Methode für verschiedene Parametertypen bereitstellt. In OOP , wird es als allgemein bekannte Methode Überlastung . Zum Beispiel:

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

Beide format Methoden teilen sich ein einzelne Schnittstelle , aber sie arbeiten auf Einheiten von verschiedene Typen .

Parametric Polymorphismus

Parametric Polymorphismus ist der Akt des eine Klasse (oder Methode) auf einer Art arbeiten, die selbst ist ein Parameter, der Klasse (oder Methode). Es wird oft bezeichnet als Generika .

Zum Beispiel Javas List[T] erwartet einen Parameter T bei Instanziierung Zeit, und dieser Parameter definiert den Typ des resultierenden Objekts.

Hinweis für Puristen, die ich gezielt ignorieren bin rohe Typen , wie ich das Gefühl, sie würden nur vernebeln in diesem Zusammenhang.

List[String] und List[Date] teilen sich ein einzige Schnittstelle , aber die Arbeit an (und sind) verschiedene Typen .

Subtyp-Polymorphie

Subtyp-Polymorphie ist wahrscheinlich das, was Sie zunächst in Ihrer Frage gemeint. Es ist der Akt des eine einzige Schnittstelle zu mehreren Implementierungen der gleichen Art zu schaffen

Um das übliche Beispiel zu verwenden: Animal bietet einen Vertrag, der alle Implementierungen respektieren müssen. Dog ist ein Animal, und als solche unterstützt alle Operationen, die Animal erklärt. Nach dem rel="nofollow">, dies ermöglicht es Ihnen, eine Instanz von Dog zu verwenden, wo eine Instanz von Animal erwartet wird (aber nicht umgekehrt).

Wenn Cat und Dog beiden Unterklassen von Animal sind, dann teilen sie einzige Schnittstelle , sind aber in der Tat verschiedene Typen .

Ich werde hier in ein bisschen eine Tangente, aber Subtyp Polymorphismus ist (glaube ich) die einzige, die können überschrieben : der Akt der das Verhalten einer Methode neu zu definieren, indem eine definierte Elternklasse. Dies wird oft verwechselt mit Überlastung , die, wie wir schon gesehen haben, ist eine Art von Polymorphismus und nicht in der Tat braucht Subklassifizieren (auch nicht-Klassen benötigt, wirklich).

Polymorphismus ist eine Software-Codierung Abstraktion, wo mehrere verschiedene zugrunde liegenden Einheiten (in der Regel Daten, aber nit immer) alle eine gemeinsame Schnittstelle, die sie zur Laufzeit identisch aussehen und handeln können. Wir verwenden diese als Entwicklungstechnik konsistentes Verhalten über einen weiten Bereich von ähnlichen, aber nicht identischen Fällen mit einer absoluten minimalen Implementierung zu erzwingen, damit die Erwartung für Fehler und Inkonsistenzen zu reduzieren.

Paul.

Polymorphismus == mehr Klassen + gleiche Methode Signaturen + klassenspezifische Verhalten.

Es scheint, dass die besten Definitionen hier vorgesehen sind, so lassen Sie mich meine zwei Cent hinzufügen bitte, nur für andere Beobachter. Ich hoffe, es könnte mehr helfen.

Es gibt zwei Arten von Polymorphismus:

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

Das ist einfach Methode Überlastung und Überladen von Operatoren

2.  Run time or (dynamic) polymorphism.

Der erste Term aus der Java und C ++ Terminologie vererbt wird.

Aber in der .NET Terminologie nur die zweiten ( Ich meine Laufzeit-Polymorphismus ) ist wirklich sollte als Polymorphismus und einfach als Polymorphismus .

Und soweit ich weiß, gibt es drei Methoden für die Umsetzung ( Laufzeit ) Polymorphismus .

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

Ein einfaches Beispiel für Interface-basierten Polymorphismus:

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

Ausgabe:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

Mehrere Formen eines einzelnen Objekts wird Polymorphismus genannt.

Polymorphismus ist die Fähigkeit eines Objekts zu erscheinen und anders für den gleichen Aufruf zu verhalten. ex: jedes Tier erscheinen und Ton anders (wenn Sie traf es :))

Polymorphismus ist ein Feature von Programmiersprachen, die ein Objekt als Instanz des Supertypen behandelt werden können.

Geben einen einzigen Namen auf eine Reihe von analogen Operationen auf verschiedenen Arten. Wenn gut gemacht, ist die Analogie offensichtlich z.B. „Hinzufügen“ Zahlen arithmetisch und „Hinzufügen“ Strings durch Verkettung (die summiert ihre Längen).

Polymorphismus

Verschiedene Objekte auf die gleiche Botschaft auf verschiedene Weise reagieren können, Objekte ermöglichen, miteinander zu interagieren, ohne ihre genaue Art zu kennen.

Via: http://www.agiledata.org/essays/objectOrientation101.html

Dies ist die Definition, die ich habe immer gefolgt:

Zwei Objekte sind polymorph (in Bezug auf ein bestimmtes Protokoll) zwischen ihnen, wenn beide auf die gleichen Nachrichten mit dem gleichen semantischen reagieren.

Polymorphismus ist über Nachrichten, ist über die Möglichkeit, die gleiche Menge von Nachrichten mit den gleichen semantischen reagieren zu können.

Wenn zwei Objekt zu leeren reagieren kann? aber die Semantik der Nachricht anders ist, dann .. sie sind nicht polymorph.

Polymorphismus an der unteren Ebene ist die Fähigkeit, Methoden aufzurufen, die durch den Implementierer einer Schnittstelle von der Schnittstelleninstanz definiert sind.

Polymorphismus ist eine Programmierfunktion, die ein Objekt ermöglicht viele Arten zu haben ( ‚Formen‘) und können Sie es als eine dieser Arten zu behandeln, je nachdem, was Sie über die anderen Arten, ohne zu wissen oder Pflege tun müssen.

Polymorphismus ist die Sprache Funktionalität auf hohem Niveau algorithmischen Code ermöglicht auf mehrere Arten von Daten unverändert zu betreiben. Und der andere Satz, was immer es war für ... ;-P.

(Die Typen C ++ unterstützt aufgeführt sind und in meiner Antwort gegenüber: Polymorphismus in c ++ )

Polymorphismus Konzept wurde in letzter Zeit ein Phänomen. Hier ist die tatsächliche Drift. Runtime legt fest, welche Teilverfahren durch einen Verweis von einer Superklasse aufgerufen werden. Nun, was in der Praxis bedeutet? Es bedeutet eigentlich nichts. Sie können einfach ohne Polymorphismus kodieren. Warum also? Denn wenn wir den Polymorphismus nicht haben, hatten wir alle Unterklassen Funktionen Definitionen auswendig zu lernen. Polymorphismus erspart uns dies in der Praxis.

Sie können eine Liste wie folgt definieren:

List list = new List();

, aber wenn Sie für IList überprüfen, können Sie von der Schnittstelle profitieren:

IList list = new List();

und verwenden Sie die IList Referenz frei. Unter der Annahme, IList wird auch in einer anderen Klasse implementiert, können Sie Methoden dieser unbekannten Klasse über wieder IList Referenz verwenden, ohne zu versuchen, dass Klassennamen zu erinnern. Marvelous, nicht wahr?

Jetzt, mehr wertvollen Informationen kommen:
Java ist standardmäßig polymorphe, während .NET und C ++ ist nicht in MS, haben Sie die Basisfunktion virtual (und in .NET override Schlüsselwort) zu erklären.

Auch gibt es 2 integrale Regeln in Polymorphismus. Eine ist die Vererbung (via Schnittstelle Impl. Oder über Klasse erstreckt) und die andere zu überschreiben. Ohne zwingende, Polymorphismus existiert nicht. Beachten Sie, dass Verfahren Überlastung (die immer in einer einzigen Klasse) ist auch eine Art von „minimalistisch“ Polymorphismus.

Für eine gegebene Methodensignatur, werden verschiedene Verfahren Implementierungen laufen für verschiedene, hierarchisch bezogenen Klassen.

Polymorphismus ist die Fähigkeit, verschiedene Klassen zu verwenden, die eine gemeinsame Schnittstelle (oder erweitern, um eine gemeinsame Basisklasse) in einer gemeinsamen Art und Weise implementieren, ohne jetzt die konkrete Umsetzung zu benötigen, und nur die Methoden zur Verfügung, in der gemeinsamen Schnittstelle.

Dh: In Java als Arraylist und LinkedList beide Liste implementieren, wenn Sie eine Variable als Liste deklarieren, können Sie immer die Operationen in List, egal welche erlaubt ausführen, wenn Sie Variable wurde als Arraylist oder ein LinkedList instanziert.

Entities des gleichen Typs (das heißt, dieselbe Schnittstelle implementiert oder von derselben Klasse abgeleitet), verhalten sich auf unterschiedliche Weise (unter gleichen Methodennamen).

Ich denke, Umsetzung von Methoden der gleichen Signatur in verschiedenen Klassen (eine Art von Vererbungsbeziehung, die entweder mit sich oder Geräten) Methode überwiegende ist und auch Polymorphismus, weil wir auf diese Weise viele Formen der gleichen Methode Unterschrift erzielen.

Ich denke, manchmal Objekte werden dynamisch genannt. Sie sind nicht sicher, ob das Objekt wäre ein Dreieck, Quadrat usw. in einer klassischen Form Poly sein. Beispiel.

Also, lassen Sie alle solche Dinge hinter, nennen wir nur die Funktion der abgeleiteten Klasse und übernehmen die eine der dynamischen Klasse aufgerufen werden.

Sie würden, wenn sich eine sqaure, Dreieck oder Rechteck nicht. Sie kümmern sich nur über die Region. Daher werden die getArea Verfahren nach dem dynamischen Objekt übergeben aufgerufen werden, abhängig.

Polymorphismus ist die Fähigkeit einer Funktion zur automatischen Eingangsdaten unterschiedlicher Datentypen zu akzeptieren anzupassen. Sie können auf 'Hinzufügen' zwei Doppel '1.1' und '2.2' und get '3.3' oder 'Add' zwei Strings "Stack" und "Überlauf" und erhält "Stackoverflow".

Polymorphismus ist, wenn verschiedene Objekte der gleichen Methode in einer anderen Art und Weise reagieren. Zum Beispiel bewegt sich ein Auto auf der Straße, während eine Person auf der Straße geht. Das sind zwei Objekte auf der gleichen Straße auf eine andere Art und Weise zu reagieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top