Si puede conducir un automóvil de 4 puertas, también puede conducir una camioneta. Si ha conducido un automóvil con motor de combustión, también puede conducir un automóvil eléctrico.

La forma y el tamaño de los vehículos de pasajeros pueden ser diferentes de uno a otro. El motor que hace funcionar esos vehículos también podría ser completamente diferente. Pero al conductor no le importa.

Simplemente sube, abrocha el cinturón, enciende el vehículo, lo pone en marcha y conduce. Eso es porque los autos, camiones y camionetas son polimórfico.

Polimorfismo: descomponiéndolo

Veamos la palabra polimorfismo. Puedes dividirlo en escuela politécnica, morph, y ismo.

escuela politécnica significa muchos, como polígono significa muchos ángulos. Cuando se usa como sustantivo, morph es una variante de una especie. Y ismo puede significar sistema.

Entonces, polimorfismo simplemente significa un sistema de muchas variaciones. Sin embargo, eso todavía no le dice mucho sobre cómo se usa en programación. Eso es lo siguiente.

instagram viewer

Si camina como un pato... Por qué los objetos polimórficos son impresionantes

Cuando crea una clase en su código que hereda de otra clase, está vinculando la nueva clase a un contrato. El contrato establece que cada variable y función en el padre también estará en el hijo.

Cada vehículo tiene un volante, pedales de acelerador y freno, y una señal de giro. No es necesario abrir el capó para conducir un automóvil. Todo lo que importa es que es un auto.

Lo mismo se aplica a las clases que heredan de otras clases. Aquí hay un ejemplo en TypeScript:


class Vehicle {
_ motor privado: cadena;
_ neumáticos privados: número;
constructor (motor: cadena = "combustión", neumáticos: número = 4) {
this._engine = motor;
this._tires = neumáticos;
}
acelerar (velocidad: número) {
console.log ("acelerando a una velocidad de" + velocidad);
}
freno (presión: número) {
console.log ("aplicar" + presión + "presión");
}
Gire a la izquierda() {
console.log ("girando a la izquierda");
}
Gire a la derecha() {
console.log ("girando a la derecha");
}
}
class Car extiende Vehículo {
}
clase Tesla extiende Coche {
constructor () {
super ("eléctrico");
}
}

En este ejemplo, hay un Vehículo clase. El Coche la clase hereda de la Vehículo clase. Y Tesla hereda de Coche. Ahora creemos un par de objetos y veámoslos.

let myCoupe: Car = new Vehicle ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
deje mySedan: Vehicle = new Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Puedes ver que declaramos myCoupe ser un Coche y mySedan ser un Vehículo. Luego instanciamos myCoupe como nuevo Vehículo y mySedan como nuevo Tesla. Si tu visite el sandbox de TypeScript y ejecute el código, verá que funciona sin errores. Y se comporta como cabría esperar, según el contrato.

En otras palabras, todos los vehículos pueden girar a la izquierda porque lo heredaron del Vehículo clase. El compilador sabe que cada hijo de Vehículo acordado con el contrato. Así que asume que todo está bien, sin importar en qué clases se escribieron o instanciaron los objetos.

A esto a veces se le llama "tipeo de pato". El compilador asume que si camina como un pato y habla como un pato, bien podría ser un pato. Entonces, el compilador no se preocupa por los detalles y simplemente trata el objeto como un pato.

El polimorfismo hace que su código sea a prueba de balas

Otra ventaja del contrato de polimorfismo es la garantía de que su código funcionará. Si ha escrito fuertemente todas sus variables y lo que devuelve cada función, sabe que cada niño siempre coincidirá con variables, funciones y tipos.

Eso significa que puede agregar y cambiar el código en sus clases sin romper su programa. Cada objeto que hace referencia a un Vehículo El objeto siempre obtendrá datos y funciones que cumplan con las expectativas, sin importar cuánto Coche cambios.

Es posible que el código dentro de la función no muestre los resultados correctos. Pero ese es un problema diferente. Siempre que la función siga el contrato y devuelva el tipo esperado de variable, no resultará en un error de descifrado de código.

El polimorfismo es enorme y aquí hay 10 principios de programación más que debe conocer.

Practica el polimorfismo

  • Utilice el enlace de la zona de pruebas de arriba para crear un Bote clase.
  • Cree una instancia de un nuevo objeto de barco de tal manera que sea un Vehículo tipo, pero todavía parece un barco.
  • Asegúrese de que el barco todavía se comporte como un vehículo.

Un último ejemplo de polimorfismo

El polimorfismo puede ser un concepto complicado de comprender inicialmente. Pero una vez que lo obtiene, ha dado un gran paso hacia la comprensión de lo que realmente es la programación orientada a objetos. Sin embargo, el concepto aún puede parecer teórico. Así que aquí hay un ejemplo sólido del mundo real para ayudarlo a ver cuán útil es.

Imagina que estás creando una aplicación web que se conecta a una base de datos MySQL. Luego, el jefe decide cambiar a una base de datos PostgreSQL. ¿Eso significa que tiene que reescribir todas las llamadas a su base de datos?

No, no es así. Si su aplicación usa un Acceso a los datos clase con subclases que realmente juegan con los datos, estás de suerte. El Acceso a los datos class define cómo su aplicación interactúa con los datos, no cómo interactúa con la base de datos.

Tienes subclases como MySQLAccess y PostgresQLAccess que hacen todo el trabajo sucio. Pero si tu aplicación solo tiene Acceso a los datos objetos, puede intercambiar bases de datos sin volver a escribir una sola línea de código de la aplicación.

CuotaPíoCorreo electrónico
Cómo organizar su código orientado a objetos con herencia

Obtener la programación orientada a objetos correctamente significa que necesita saber sobre la herencia y cómo puede simplificar la codificación y reducir los errores.

Leer siguiente

Temas relacionados
  • Programación
  • Programación
  • Programación orientada a objetos
Sobre el Autor
Lee Nathan (19 Artículos publicados)

Lee es un nómada a tiempo completo y un erudito con muchas pasiones e intereses. Algunas de esas pasiones giran en torno a la productividad, el desarrollo personal y la escritura.

Más de Lee Nathan

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse