Polimorfismo-Definir En Solo Dos Oraciones [cerrado]


He mirado otras definiciones y explicaciones y ninguna de ellas me satisface. Quiero ver si alguien puede definir polimorfismo en como máximo dos oraciones sin usar ningún código o ejemplos. No quiero escuchar", Así que tienes una persona/coche/abrelatas...'o cómo se deriva la palabra (a nadie le impresiona saber lo que significa poly y morph). Si usted tiene una muy buena comprensión de lo que es el polimorfismo y tiene un buen dominio del inglés que debería ser capaz de responder a esta pregunta en un corto, aunque densa, definición. Si su definición define con precisión el polimorfismo, pero es tan denso que requiere un par de lecturas, entonces eso es exactamente lo que estoy buscando.

¿Por qué solo dos oraciones? Porque una definición es corta e inteligente. Una explicación es larga y contiene ejemplos y código. Busque aquí las explicaciones (la respuesta en esas páginas no es satisfactoria para mi pregunta):

Polimorfismo vs Sobreescritura vs Sobrecarga
Trata de describir polimorfismo tan fácil como puedas

¿Por qué hago esta pregunta ? Porque me hicieron la misma pregunta y descubrí que no podía llegar a una definición satisfactoria (para mis estándares, que son bastante altos). Quiero ver si alguna de las grandes mentes en este sitio puede hacerlo.

Si realmente no puedes hacer el requisito de dos oraciones (es un tema difícil de definir), entonces está bien si pasas. La idea es tener una definición que realmente defina qué polimorfismo es y no explica lo que hace o cómo usarlo (obtener la diferencia?).

Author: Community, 2009-01-04

30 answers

El polimorfismo permite la expresión de algún tipo de contrato, con potencialmente muchos tipos implementando ese contrato (ya sea a través de la herencia de clase o no) de diferentes maneras, cada uno de acuerdo a su propio propósito. Code usando ese contrato no debería(*) tener que preocuparse por qué implementación está involucrada, solo que el contrato será obedecido.

( * ) En el caso ideal, de todos modos - obviamente, muy a menudo el código de llamada ha elegido la implementación adecuada muy deliberadamente!

 91
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-07 06:45:35

La fruta se puede comer, como regla general, pero diferentes tipos de fruta se comen de diferentes maneras. Una manzana, que es una fruta, se puede comer (porque es una fruta). Un plátano también se puede comer (porque también es una fruta), pero de una manera diferente de una manzana. Lo pelas primero.

Bueno, al menos lo sé, pero soy raro en algunos modales, así que qué sé yo.

Esto ilustra la herencia (la fruta se puede comer), polimorfismo (algo que come fruta puede comer todo tipo de fruta), y encapsulación (un plátano tiene una piel).

En serio, sin embargo, la herencia de objetos, el polimorfismo, la encapsulación, las cosas virtuales, las cosas abstractas, las cosas privadas, las cosas públicas, todos estos son conceptos difíciles. Si alguien absolutamente quiere tener una definición de 2 oraciones de esto, por favor etiquete la pregunta como una variante de código de golf, porque dos de estas oraciones tendrán que ser tan concisas que a menos que sepa lo que ya es, no aprenderá lo suficiente sobre ella para saber lo que necesita aprender más sobre.

 66
Author: Lasse Vågsæther Karlsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-03 19:22:33

El polimorfismo declara una interfaz uniforme que no es consciente del tipo, dejando los detalles de la implementación a tipos concretos que implementan la interfaz.

 43
Author: Eran Galperin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:12:37

En realidad, hay múltiples formas de polimorfismo y hay bastante controversia sobre él; incluso puede ver profesores de CS que no pueden definirlo correctamente. Soy consciente de tres tipos:

  • Polimorfismo ad-hoc (parece un pato y camina como un pato = > es un pato). Se puede ver en Haskell y Python por ejemplo.

  • Polimorfismo genérico (donde un tipo es una instancia de algún tipo genérico). Se puede ver en C++ por ejemplo (vector de int y vector de cadena ambos tienen un tamaño de función miembro).

  • Polimorfismo subtipo (donde un tipo hereda de otro tipo). Se puede ver en la mayoría de los lenguajes de programación OO (es decir, Triangle is a Shape).

 20
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:53:30

Wikipedia: Polymorphism es una característica del lenguaje de programación que permite que los valores de diferentes tipos de datos sean manejados usando una interfaz uniforme. Bastante sencillo para mí.

 19
Author: Otávio Décio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:12:47

Realmente entiendo, por qué estás haciendo esta pregunta. Entiendo el polimorfismo, pero estaba en una entrevista de trabajo y me pidieron que diera una definición corta y clara de polimorfismo. Debido a que no podía dar una definición clara y corta, empecé a pensar en ello y aquí está mi definición:

La capacidad de los objetos de un tipo para tener una y la misma interfaz, pero diferente implementación de esta interfaz.

 14
Author: Nikolay Traykov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-14 22:57:33

Definición:

Polimorfismo es una palabra de 1 10 para una idea de 1 1 - que cuando pido que se haga algo, no me importa cómo se logre siempre y cuando el resultado final sea apropiado. Mientras el servicio se proporcione correctamente, a no me importa la implementación .

Discusión

Si bien se usa comúnmente en el desarrollo de software, especialmente en sistemas desarrollados siguiendo principios orientados a objetos, el polimorfismo es fundamentalmente un principio del mundo real y debe definirse en términos del mundo real, no tecnológicos.

Ejemplos

Cuando quiero hacer una llamada, cojo un teléfono, marca un número y hablo con la fiesta del otro lado. No me importa quién hizo el teléfono, qué tecnología utiliza, si está cableado, inalámbrico, móvil o VOIP, o si está bajo garantía.

Cuando quiero imprimir un documento, lo imprimo. No me importa el lenguaje de implementación, marca de impresora, estilo de conexión, elección de consumible o calidad de papel.

 10
Author: Bevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-07 06:54:36

Múltiples implementaciones de la misma interfaz.

Ejemplo: Muchos modelos de teléfono implementan la interfaz del teclado numérico.

 10
Author: Doug Knesek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-14 17:36:40

El polimorfismo es una estrategia orientada a objetos utilizada al diseñar modelos de objetos, para ayudar a simplificar el código. En su núcleo polimorfismo es la capacidad de definir dos objetos similares pero diferentes, y luego tratar los dos objetos como si fueran el mismo.

Ok eso es difícil....

 6
Author: JoshBerke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:11:08

El polimorfismo es una abstracción de codificación de software donde varias entidades subyacentes diferentes (generalmente datos, pero nit siempre) comparten una interfaz común que les permite verse y actuar idénticos en tiempo de ejecución. Utilizamos esto como una técnica de desarrollo para imponer un comportamiento consistente en una amplia gama de instancias similares, pero no idénticas, con una implementación mínima absoluta, lo que reduce la expectativa de errores e inconsistencias.

Paul.

 5
Author: Paul W Homer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 23:50:39

Polimorfismo == múltiples clases + mismas firmas de método + comportamiento específico de clase.

 5
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-07 15:11:55

Solo pensé en agregar mi propia interpretación de lo que es el polimorfismo: Muy genéricamente, el polimorfismo es el acto de proporcionar una interfaz únicaa entidades de diferentes tipos.

Eso es bastante genérico, pero es la única manera que se me ocurre para envolver los tres tipos de polimorfismos que conozco: ad hoc, subtipos paramétricos y . Voy a ir en más detalles a continuación, y han ordenado los tipos de polimorfismo por nombre, alfabéticamente. El que te interesa es probablemente polimorfismo subtipo, que es el último.

Polimorfismo ad hoc

El polimorfismo ad hoc es el acto de proporcionar múltiples implementaciones del mismo método para diferentes tipos de parámetros. En OOP, se conoce generalmente como método de sobrecarga. Por ejemplo:

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);
}

Ambos métodos format comparten una interfaz única , pero funcionan en entidades de diferentes tipos .

Polimorfismo paramétrico

El polimorfismo paramétrico es el acto de hacer que una clase (o método) funcione en un tipo que es en sí mismo un parámetro de la clase (o método). A menudo se conoce como genéricos.

Por ejemplo, el List[T] de Java espera un parámetro T en el momento de la instanciación, y este parámetro define el tipo del objeto resultante.

Nota para los puristas que estoy ignorando a propósito tipos crudos como me siento sólo enturbiarían las aguas en este contexto.

List[String] y List[Date]comparten una interfaz única , pero trabajan en (y son) diferentes tipos.

Polimorfismo subtipo

Subtipo polimorfismo es probablemente lo que inicialmente quiso decir en su pregunta: Es el acto de proporcionar una sola interfaz para múltiples implementaciones del mismo tipo.

Para usar el ejemplo habitual: Animal proporciona un contrato que todas las implementaciones deben respetar. Dog es un Animal, y como tal soporta todas las operaciones que Animal declara. De acuerdo con el principio de sustitución de Liskov, esto le permite usar una instancia de Dog donde se espera una instancia de Animal (pero no al revés).

Si Cat y Dog son ambas subclases de Animal, entonces comparten una interfaz única pero son de hecho diferentes tipos.

Me voy en un poco de tangente aquí, pero el polimorfismo subtipo es (creo) el único que permite reemplazar: el acto de redefinir el comportamiento de un método definido por una clase padre. Esto a menudo se confunde con la sobrecarga que, como vimos antes, es un tipo de polimorfismo y de hecho no necesita subclasificación (ni necesita clases, en realidad).

 5
Author: Nicolas Rinaudo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:45:56

Parece que las mejores definiciones se proporcionan aquí, así que permítanme añadir mis dos centavos por favor, solo para otros observadores. Espero que pueda ayudar más.

Hay dos tipos de polimorfismo:

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

Eso es simplemente la sobrecarga del método y la sobrecarga del operador

2.  Run time or (dynamic) polymorphism.

El primer término se hereda de la terminología de Java y C++.

Pero en la terminología . NET solo la segunda (Quiero decir polimorfismo en tiempo de ejecución) se supone realmente como polimorfismo y se llama simplemente polimorfismo.

Y por lo que sé hay tres métodos para implementar (tiempo de ejecución) polimorfismo .

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

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

Un ejemplo simple De polimorfismo basado en interfaces:

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();
    }
}

Salida:

 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:
 5
Author: siamak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:50:17

Las formas múltiples de un solo objeto se denominan Polimorfismo.

 2
Author: milot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:44:35

El polimorfismo es la capacidad de un objeto de aparecer y comportarse de manera diferente para la misma invocación. ej: cada animal aparece y suena diferente (cuando lo golpeas :) )

 2
Author: Mallik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-07 20:02:43

El polimorfismo es una característica de los lenguajes de programación que permite que un objeto sea tratado como una instancia de su supertipo.

 2
Author: TarkaDaal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-07 09:16:44

Dando un solo nombre a un conjunto de operaciones análogas en diferentes tipos. Cuando se hace bien, la analogía es obvia, por ejemplo, "agregar" números aritméticamente y" agregar " cadenas por concatenación (que suma sus longitudes).

 1
Author: joel.neely,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 22:39:05

Polimorfismo

Diferentes objetos pueden responder al mismo mensaje de diferentes maneras, permitir que los objetos interactúen entre sí sin conocer su tipo exacto.

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

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-04 22:12:48

Esta es la definición que siempre he seguido:

Dos objetos son polimórficos (con respecto a un protocolo particular) entre ellos, si ambos responden a los mismos mensajes con la misma semántica.

El polimorfismo es acerca de los mensajes, es acerca de ser capaz de responder el mismo conjunto de mensajes con la misma semántica.

Si dos objetos PUEDEN responder a vacío? pero la semántica del mensaje es diferente, entonces.. no son polimórficos.

 1
Author: Claudio Acciaresi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-08 14:19:50

El polimorfismo en el nivel inferior es la capacidad de invocar métodos definidos por los implementadores de una interfaz desde la instancia de interfaz.

 1
Author: Igor Zevaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-08 14:33:24

El polimorfismo es una característica de programación que permite que un objeto tenga muchos tipos ('formas') y le permite tratarlo como cualquiera de esos tipos dependiendo de lo que necesita hacer sin saber o preocuparse por sus otros tipos.

 1
Author: Jeff Sternal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-23 22:09:45

El polimorfismo es una funcionalidad del lenguaje que permite que el código algorítmico de alto nivel opere sin cambios en múltiples tipos de datos. Y la otra frase, para lo que fuera... ;- P.

(Los tipos que admite C++ se enumeran y contrastan en mi respuesta: Polimorfismo en c++ )

 1
Author: Tony Delroy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:18

El concepto de polimorfismo se convirtió en un fenómeno últimamente. Aquí está la deriva real. Runtime define qué submétodo debe ser invocado por una referencia de una superclase. Ahora, ¿qué significa en la práctica? En realidad no significa nada. Puede codificar simplemente sin polimorfismo. Entonces, ¿por qué? Porque, si no tenemos el polimorfismo, tuvimos que memorizar todas las definiciones de funciones de subclase. El polimorfismo nos salva de esto en la práctica.

Puede definir una lista de la siguiente manera:

List list = new List();

Pero si compruebe IList, puede beneficiarse de la interfaz como:

IList list = new List();

Y utilice la referencia IList libremente. Suponiendo que IList también está implementado en otra clase, puede usar métodos de esa clase desconocida a través de la referencia de nuevo IList sin intentar recordar el nombre de esa clase. Maravilloso, ¿no?

Ahora, viene más información valiosa:
Java es por defecto polimórfico, mientras que. NET y C++ no lo son, en MS, hay que declarar la función base virtual (y en. NET override palabra clave).

También, hay 2 reglas integrales en el polimorfismo. Una es la herencia (a través de la interfaz impl. o a través de la extensión de clase) y el otro está sobreescribiendo. Sin anular, el polimorfismo no existe. Tenga en cuenta que la sobrecarga del método (que siempre en una sola clase) es también un tipo de polimorfismo "minimalista".

 0
Author: jazziiilove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-03 03:48:43

Para una firma de método dada, se ejecutan diferentes implementaciones de métodos para diferentes clases relacionadas jerárquicamente.

 0
Author: Paolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-18 16:50:13

El polimorfismo es la capacidad de usar diferentes clases que implementan una interfaz común (o extienden una clase base común) de una manera común, sin necesidad de ahora la implementación específica, y utilizando solo los métodos disponibles en la interfaz común.

Ie: En Java, como ArrayList y LinkedList ambos implementan List, si declaras una variable como List, siempre puedes realizar las operaciones permitidas en List, sin importar si tu variable fue instanciada como ArrayList o un LinkedList.

 0
Author: GaRRaPeTa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-16 19:53:21

Las entidades del mismo tipo (es decir, implementadas en la misma interfaz o derivadas de la misma clase), se comportan de diferentes maneras (bajo el mismo nombre del método).

 0
Author: paul paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:39:09

Creo que la implementación de métodos de la misma firma en diferentes clases (que tienen algún tipo de relación de herencia, ya sea utilizando extends o implements) es método overriding y también polimorfismo porque de esta manera estamos logrando muchas formas de la misma firma de método.

 0
Author: anand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:42:30

Supongo que a veces los objetos se llaman dinámicamente. No está seguro de si el objeto sería un triángulo, cuadrado, etc. en una forma clásica poli. ejemplo.

Así que, para dejar todas estas cosas atrás, solo llamamos a la función de clase derivada y asumimos que se llamará a la de la clase dinámica.

No te importaría si es un cuadrado, triángulo o rectángulo. Sólo te importa la zona. Por lo tanto, el método getArea será llamado dependiendo del objeto dinámico pasado.

 -2
Author: Kapil D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-17 05:48:10

El polimorfismo es la capacidad de una función para adaptarse automáticamente para aceptar datos de entrada de diferentes tipos de datos. Usted puede Añadir dos dobles '1.1' y '2.2, y obtener '3.3' o 'Añadir' dos cadenas de "Pila" y "Desbordamiento" y "StackOverflow".

 -2
Author: J-Dizzle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-21 16:51:55

El polimorfismo es cuando diferentes objetos responden al mismo método de una manera diferente. Por ejemplo, un automóvil se mueve en la carretera mientras una persona camina en la carretera. Son dos objetos que responden al mismo camino de una manera diferente.

 -3
Author: user2342589,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:43:06