¿Qué es el polimorfismo, para qué sirve y cómo se utiliza?

Resuelto UnkwnTech asked hace 15 años • 29 respuestas

¿Qué es el polimorfismo, para qué sirve y cómo se utiliza?

UnkwnTech avatar Jun 23 '09 15:06 UnkwnTech
Aceptado

Si piensas en las raíces griegas del término, debería resultar obvio.

  • Poli = muchos: polígono = muchos lados, poliestireno = muchos estirenos (a) , políglota = muchos idiomas, etc.
  • Morph = cambio o forma: morfología = estudio de la forma biológica, Morfeo = el dios griego de los sueños capaz de tomar cualquier forma.

Entonces, el polimorfismo es la capacidad (en programación) de presentar la misma interfaz para diferentes formas subyacentes (tipos de datos).

Por ejemplo, en muchos idiomas, los números enteros y flotantes son implícitamente polimórficos, ya que se pueden sumar, restar, multiplicar, etc., independientemente de que los tipos sean diferentes. Rara vez se los considera objetos en el sentido habitual.

Pero, de la misma manera, una clase como BigDecimalor Rationalor Imaginarytambién puede proporcionar esas operaciones, aunque operen con tipos de datos diferentes.

El ejemplo clásico es la Shapeclase y todas las clases que pueden heredar de ella (cuadrado, círculo, dodecaedro, polígono irregular, splat, etc.).

Con el polimorfismo, cada una de estas clases tendrá datos subyacentes diferentes. Una forma de punto necesita sólo dos coordenadas (suponiendo que esté en un espacio bidimensional, por supuesto). Un círculo necesita un centro y un radio. Un cuadrado o rectángulo necesita dos coordenadas para las esquinas superior izquierda e inferior derecha y (posiblemente) una rotación. Un polígono irregular necesita una serie de líneas.

Al hacer que la clase sea responsable de su código y de sus datos, puede lograr polimorfismo. En este ejemplo, cada clase tendría su propia Draw()función y el código del cliente podría simplemente hacer:

shape.Draw()

para obtener el comportamiento correcto para cualquier forma.

Esto contrasta con la antigua forma de hacer las cosas en la que el código estaba separado de los datos y habría tenido funciones como drawSquare()y drawCircle().

La orientación a objetos, el polimorfismo y la herencia son conceptos estrechamente relacionados y es vital conocerlos. Ha habido muchas "soluciones mágicas" durante mi larga carrera que básicamente fracasaron, pero el paradigma OO resultó ser bueno. Aprendalo, compréndalo, ámelo; se alegrará de haberlo hecho :-)


(a) Originalmente escribí eso como una broma pero resultó ser correcto y, por lo tanto, no tan divertido. El monómero estireno está hecho de carbono e hidrógeno, y el poliestireno está hecho de grupos de eso .C8H8(C8H8)n

Quizás debería haber dicho que un pólipo eran muchas apariciones de la carta paunque, ahora que he tenido que explicar el chiste, ni siquiera eso me parece gracioso.

A veces, deberías abandonar mientras estás atrasado :-)

paxdiablo avatar Jun 23 '2009 08:06 paxdiablo

El polimorfismo es cuando puedes tratar un objeto como una versión genérica de algo, pero cuando accedes a él, el código determina de qué tipo exacto es y llama al código asociado.

Aquí hay un ejemplo en C#. Cree cuatro clases dentro de una aplicación de consola:

public abstract class Vehicle
{
    public abstract int Wheels;
}

public class Bicycle : Vehicle
{
    public override int Wheels()
    {
        return 2;
    }
}

public class Car : Vehicle
{
    public override int Wheels()
    {
        return 4;
    }
}

public class Truck : Vehicle
{
    public override int Wheels()
    {
        return 18;
    }
}

Ahora cree lo siguiente en Main() del módulo para la aplicación de consola:

public void Main()
{
    List<Vehicle> vehicles = new List<Vehicle>();

    vehicles.Add(new Bicycle());
    vehicles.Add(new Car());
    vehicles.Add(new Truck());

    foreach (Vehicle v in vehicles)
    {
        Console.WriteLine(
            string.Format("A {0} has {1} wheels.",
                v.GetType().Name, v.Wheels));
    }
}

En este ejemplo, creamos una lista de la clase base Vehículo, que no sabe cuántas ruedas tiene cada una de sus subclases, pero sí sabe que cada subclase es responsable de saber cuántas ruedas tiene.

Luego agregamos una bicicleta, un automóvil y un camión a la lista.

A continuación, podemos recorrer cada Vehículo en la lista y tratarlos a todos de manera idéntica; sin embargo, cuando accedemos a la propiedad 'Ruedas' de cada Vehículo, la clase Vehículo delega la ejecución de ese código a la subclase correspondiente.

Se dice que este código es polimórfico, ya que el código exacto que se ejecuta está determinado por la subclase a la que se hace referencia en tiempo de ejecución.

Espero que esto te ayude.

Antony Gibbs avatar Jun 24 '2010 13:06 Antony Gibbs

De Comprensión y aplicación del polimorfismo en PHP , gracias Steve Guidetti.

Polimorfismo es una palabra larga para un concepto muy simple.

El polimorfismo describe un patrón en la programación orientada a objetos en el que las clases tienen diferentes funcionalidades mientras comparten una interfaz común.

La belleza del polimorfismo es que el código que trabaja con las diferentes clases no necesita saber qué clase está usando, ya que todas se usan de la misma manera. Una analogía del mundo real para el polimorfismo es un botón. Todo el mundo sabe cómo utilizar un botón: simplemente se le aplica presión. Sin embargo, lo que “hace” un botón depende de a qué está conectado y del contexto en el que se usa, pero el resultado no afecta cómo se usa. Si tu jefe te dice que presiones un botón, ya tienes toda la información necesaria para realizar la tarea.

En el mundo de la programación, el polimorfismo se utiliza para hacer que las aplicaciones sean más modulares y extensibles. En lugar de declaraciones condicionales desordenadas que describen diferentes cursos de acción, usted crea objetos intercambiables que selecciona según sus necesidades. Ese es el objetivo básico del polimorfismo.

Ajay Patel avatar Nov 04 '2011 05:11 Ajay Patel

Si alguien les dice CORTE a estas personas

  1. El cirujano
  2. El estilista
  3. El actor

¿Lo que sucederá?

  • El cirujano comenzaría a hacer una incisión.
  • El estilista empezaba a cortarle el pelo a alguien.
  • El actor dejaría abruptamente de actuar fuera de la escena actual, esperando orientación del director.

Entonces, la representación anterior muestra qué es el polimorfismo (mismo nombre, comportamiento diferente) en programación orientada a objetos.

Si va a una entrevista y el entrevistador le pide que le diga/muestre un ejemplo en vivo de polimorfismo en la misma sala en la que estamos sentados, digamos:

Respuesta - Puerta / Ventanas

¿Se pregunta cómo?

A través de la puerta/ventana: puede entrar una persona, puede entrar aire, puede entrar luz, puede entrar lluvia, etc.

Para entenderlo mejor y de una manera sencilla, utilicé el ejemplo anterior. Si necesita una referencia para el código, siga las respuestas anteriores.

Sanchit avatar Nov 15 '2014 11:11 Sanchit