Pregunta

He mirado otras definiciones y explicaciones y ninguna de ellas me satisface. Quiero ver si alguien puede definir el polimorfismo en a lo sumo dos oraciones sin usar ningún código o ejemplo. No quiero escuchar 'Así que tienes una persona / automóvil / abrelatas ...' o cómo se deriva la palabra (a nadie le impresiona que sepas lo que significa poli y morfología). Si tiene un buen conocimiento de lo que es el polimorfismo y tiene un buen dominio del inglés, entonces debería poder responder a esta pregunta en una definición breve, aunque densa. Si su definición define con precisión el polimorfismo, pero es tan densa 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 explicaciones aquí (la respuesta en esas páginas no es satisfactoria para mi pregunta):

Polymorphism vs Overriding vs Overloading
Trate de describir el polimorfismo tan fácil como pueda

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

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

¿Fue útil?

Solución

El polimorfismo permite la expresión de algún tipo de contrato, con potencialmente muchos tipos que implementan ese contrato (ya sea por herencia de clase o no) de diferentes maneras, cada una de acuerdo con su propio propósito. El código que usa que el contrato no debería (*) debe preocuparse por la implementación involucrada, solo que el contrato será obedecido.

(*) En el caso ideal, de todos modos, obviamente, ¡con bastante frecuencia el código de llamada ha elegido la implementación adecuada muy deliberadamente!

Otros consejos

Como norma general, se puede comer fruta, 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 a una manzana. Lo pelas primero.

Bueno, al menos lo hago, pero soy raro en algunos aspectos, entonces, ¿qué sé?

Esto ilustra la herencia (se puede comer fruta), el polimorfismo (algo que come fruta puede comer todo tipo de fruta) y la encapsulación (un plátano tiene 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 quiere absolutamente tener una definición de 2 oraciones de esto, marque la pregunta como una variante de código de golf, porque dos de esas oraciones tendrán que ser tan concisas que, a menos que sepa lo que es, no sabrá lo suficiente sobre para saber de qué necesitas aprender más.

El polimorfismo está declarando una interfaz uniforme que no reconoce los tipos, dejando los detalles de la implementación a tipos concretos que implementan la interfaz.

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). Puede verse en C ++ por ejemplo (el vector de int y el vector de cadena tienen un tamaño de función miembro).

  • polimorfismo de subtipo (donde un tipo hereda de otro tipo). Puede verse en la mayoría de los lenguajes de programación OO (es decir, el triángulo es una forma).

Wikipedia: El polimorfismo es una característica del lenguaje de programación que permite manejar valores de diferentes tipos de datos utilizando una interfaz uniforme. Bastante sencillo para mí.

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 breve y clara de polimorfismo. Como no podía dar una definición clara y breve, comencé a pensar en ello y aquí está mi definición:

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

Definición :

Polimorfismo es una palabra de $ 10 para una idea de $ 1, que cuando pido que se haga algo, no me importa cómo se logre, siempre que el resultado final sea apropiado. Siempre que el servicio se proporcione correctamente, 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 telefónica, levanto un teléfono, marcho un número y hablo con la persona que está al otro lado. No me importa quién hizo el teléfono, qué tecnología usa, ya sea cableada, inalámbrica, móvil o VOIP, o si está bajo garantía.

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

Múltiples implementaciones de la misma interfaz.

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

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

Ok, eso es difícil ...

Pensé que agregaría mi propia interpretación de lo que es el polimorfismo: muy genéricamente, el polimorfismo es el acto de proporcionar una interfaz única a entidades de diferentes tipos .

Eso es bastante genérico, pero esa es la única forma en que puedo pensar para envolver los tres tipos de polimorfismos que conozco: ad hoc , parametric y subtipo . Iré con más detalles a continuación, y ordené alfabéticamente los tipos de polimorfismo por nombre. El que más te interesa es probablemente el polimorfismo de subtipo , que es el último.

Polimorfismo ad hoc

Polimorfismo ad hoc es el acto de proporcionar implementaciones múltiples del mismo método para diferentes tipos de parámetros. En OOP , generalmente se conoce como sobrecarga de métodos . 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);
}
Los dos métodos

formato comparten una interfaz única , pero funcionan en entidades de tipos diferentes .

Polimorfismo paramétrico

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 le conoce como genéricos .

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

Para los puristas, tenga en cuenta que estoy ignorando a propósito tipos brutos , ya que creo que simplemente enturbiarían las aguas en este contexto.

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

Subtipo polimorfismo

Subtipo polimorfismo es probablemente lo que quiso decir inicialmente en su pregunta: es el acto de proporcionar una interfaz única 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 admite 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 subclases de Animal , entonces comparten una interfaz única pero están en hecho diferentes tipos .

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

El polimorfismo es una abstracción de codificación de software donde varias entidades subyacentes diferentes (generalmente datos, pero siempre están) comparten una interfaz común que les permite verse y actuar de manera idéntica en el tiempo de ejecución. Usamos 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.

polimorfismo == varias clases + firmas del mismo método + comportamiento específico de la clase.

Parece que las mejores definiciones se proporcionan aquí, así que permítame agregar mi 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 de métodos y la sobrecarga de operadores

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 el segundo ( quiero decir polimorfismo de tiempo de ejecución ) es realmente supuesto como polimorfismo y simplemente llamado polymorphism .

Y, que yo sepa, 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 interfaz:

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:

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

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

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

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

Polimorfismo

Los diferentes objetos pueden responder al mismo mensaje de diferentes maneras, permiten que los objetos interactúen entre sí sin saber su tipo exacto.

Vía: http://www.agiledata.org/essays/objectOrientation101.html

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 se trata de mensajes, se trata de poder responder el mismo conjunto de mensajes con la misma semántica.

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

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

El polimorfismo es una función 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.

El polimorfismo es una funcionalidad de lenguaje que permite que el código algorítmico de alto nivel funcione sin cambios en múltiples tipos de datos. Y la otra oración, sea la que sea para ... ;-P.

(Los tipos de soporte de C ++ están listados y contrastados en mi respuesta: Polymorphism in c ++ )

El concepto de polimorfismo se convirtió en un fenómeno últimamente. Aquí está la deriva real. El tiempo de ejecución define qué submétodo debe invocarse mediante una referencia de una superclase. Ahora, ¿qué significa en la práctica? Significa en realidad nada. Puedes codificar simplemente sin polimorfismo. ¿Entonces por qué? Porque, si no tenemos el polimorfismo, tenemos 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 comprueba IList , puede beneficiarse de la interfaz como:

IList list = new List();

y use la referencia IList libremente. Suponiendo que IList también se implementa en otra clase, puede usar los 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 son, en MS, tiene que declarar la función base virtual (y en .NET override ).

Además, hay 2 reglas integrales en el polimorfismo. Una es la herencia (a través de la interfaz o la extensión de la clase) y la otra es la anulación. Sin anular, el polimorfismo no existe. Tenga en cuenta que la sobrecarga de métodos (que siempre en una sola clase) también es un tipo de " minimalistic " polimorfismo.

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

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 aplicar ahora la implementación específica, y usar solo los métodos disponibles en la interfaz común.

Es decir: en Java, como ArrayList y LinkedList implementan la Lista, si declara una variable como Lista, siempre puede realizar las operaciones permitidas en la Lista, independientemente de si la variable se creó como una ArrayList o una Lista enlazada.

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

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 usando extensiones o implementos) es un método que invalida y también un polimorfismo porque de esta manera estamos logrando muchas formas de la misma firma de método. / p>

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

Entonces, para dejar atrás todas esas cosas, simplemente 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, un triángulo o un rectángulo. Sólo te importa la zona. Por lo tanto, se llamará al método getArea dependiendo del objeto dinámico que se haya pasado.

El polimorfismo es la capacidad de una función de adaptarse automáticamente para aceptar datos de entrada de diferentes tipos de datos. Puede 'Agregar' dos 'dobles' 1.1 'y' 2.2 'y obtener' 3.3 'o' Agregar 'dos ??cadenas " Pila " y " Desbordamiento " y obtenga " StackOverflow " ;.

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. Esos son dos objetos que responden al mismo camino de una manera diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top