Objetivo-C (lenguaje de programación): ¿Qué es el polimorfismo?

http://en.wikipedia.org/wiki/Pol… aunque este artículo debería fusionarse con otro artículo sobre polimorfismo, y hay algunos argumentos al respecto, creo que responde a sus preguntas correctamente.

“es la capacidad de crear una variable, una función o un objeto que tiene más de una forma”

“El uso principal del polimorfismo en la industria (teoría de la programación orientada a objetos) es la capacidad de los objetos que pertenecen a diferentes tipos para responder a llamadas a métodos, campos o propiedades del mismo nombre, cada uno de acuerdo con un comportamiento específico de tipo apropiado. El programador (y el programa) no tiene que conocer el tipo exacto del objeto de antemano, por lo que el comportamiento exacto se determina en tiempo de ejecución (esto se llama enlace tardío o enlace dinámico ) “.

Vea uno de los ejemplos: por ejemplo, el de Java: http://en.wikipedia.org/wiki/Pol…

El polimorfismo significa literalmente formas múltiples .

Es un concepto en lenguajes de programación orientados a objetos, como C ++ y Java, donde los objetos pueden heredar la funcionalidad de una clase base y cambiarla para proporcionar un comportamiento especializado.

  struct Animal { 
     bool isNotAPlant () {return true;  }
     virtual void speak () = 0;
 };

 struct Dog: public Animal { 
     void speak () {printf ("¡Guau! \ n");  }
 };

 struct Cat: public Animal { 
     void speak () {printf ("¡Miau! \ n");  }
 };

Aquí tenemos una clase base, Animal, y otras dos clases que se derivan de ella. Ambos heredan la función isNotAPlant (), pero han anulado las funciones speak ().

Esto es muy poderoso. Por ejemplo, podría mantener una lista de animales:

std :: vector animales;

y cuando lo repitas, dirán las cosas correctas:

  animals.push_back (nuevo perro ());
 animals.push_back (nuevo perro ());
 animals.push_back (nuevo Cat ());
 animals.push_back (nuevo perro ());
 animals.push_back (nuevo Cat ());
 animals.push_back (nuevo Cat ());
 animals.push_back (nuevo perro ());
    
 for (size_t i = 0; i  speak ();
 }

Esto produce:

¡Guau!
¡Guau!
¡Maullar!
¡Guau!
¡Maullar!
¡Maullar!
¡Guau!

También es un término de la biología cuando los individuos en una especie pueden tener fenotipos (cuerpos) muy diferentes, como el masculino y el femenino. Hay otros ejemplos, como los patrones en las alas de mariposa que varían dentro de una especie. Pero los temas de esta pregunta muestran que es una pregunta de programación.

El polimorfismo es un tipo de generalización de tiempo de ejecución que está habilitado por el sistema de tipos en lenguajes de programación como C ++ y Haskell. Típicamente, hablamos de dos tipos de polimorfismo en lenguajes de programación:

  1. Polimorfismo de subtipo: que permite que una función que se define sobre un parámetro formal que tiene un tipo también se defina sobre subtipos del mismo.
  2. Polimorfismo paramétrico: que permite que una clase de plantilla que se define sobre un parámetro de plantilla que tiene un tipo también se defina sobre subtipos del mismo.

Imagine una función que se define sobre un tipo que llamaremos Animal . Si luego heredamos de Animal para definir un nuevo tipo, por ejemplo, Humano , la función a medida también se definirá sobre el nuevo tipo. ¿Por qué? Debido a que el sistema de tipo C ++ habrá forzado, en tiempo de compilación, que la implementación de la función no dependía de características específicas del tipo Humano.

Es la comprobación en tiempo de compilación de la pertenencia a la jerarquía de tipos lo que garantiza la seguridad de la sustitución en tiempo de ejecución por subtipos. Como probablemente ya haya adivinado, el polimorfismo paramétrico funciona de manera similar a la anterior, excepto con parámetros de plantilla. Como en C ++ se usa el mismo sistema de tipos en cualquier caso, se aplican las mismas reglas y mecanismos para la generalización.

More Interesting

En términos simples y en sus palabras, ¿cuál es la universalidad de Turing?

¿Las estadísticas son solo aprendizaje automático?

Informática: ¿Por qué la memoria contenida en los registros es tan costosa?

¿Cuál es una explicación intuitiva del problema de 'explicación' en modelos gráficos dirigidos?

¿La velocidad de ejecución de un algoritmo que, al ejecutarse, hace que el sistema físico en ejecución tenga experiencia subjetiva, hace alguna diferencia en la naturaleza de esta experiencia subjetiva?

¿Cuáles son algunas de las aplicaciones más creativas de inteligencia artificial / aprendizaje automático?

¿Qué es el almacenamiento?

¿Debo comprar un Macbook Pro si mi presupuesto realmente se está estirando para obtener uno?

¿Por qué se sigue utilizando el modo de cifrado CBC en lugar del modo CTR aunque el modo CBC ha demostrado ser vulnerable (por ejemplo, ataque de caniche)?

Si tenemos un conjunto muy grande de objetos comparables, ¿qué implementación de la tabla de símbolos es empíricamente más rápida: una tabla hash o un árbol de búsqueda binario balanceado? ¿Por qué?

¿Cómo configuro una ubicación personalizada / simulada en Android?

¿Cómo comenzaron las organizaciones informáticas como ACM o IEEE?

Tengo 4 años de experiencia en TI. Estoy planeando cambiar a BIG Data y Hadoop. ¿Cuáles son los pros y los contras que debo tener en cuenta?

¿Cuáles son las 10 reglas de la ética informática?

¿Por qué es importante XOR en criptografía?