- 1. Polimorfismo con Prototipos
- 2. Polimorfismo con Clases ES6
- 3. Polimorfismo de Coerción
- 4. Polimorfismo Paramétrico
- Conclusión
El polimorfismo es un concepto fundamental en la programación orientada a objetos que permite a los objetos de diferentes clases responder a la misma función de diferentes maneras. En JavaScript, aunque no es estrictamente un lenguaje orientado a objetos, podemos implementar polimorfismo a través de herencia y prototipos. En este tutorial, exploraremos varios aspectos del polimorfismo en JavaScript con ejemplos prácticos.
1. Polimorfismo con Prototipos
JavaScript usa prototipos para la herencia. Veamos cómo podemos lograr el polimorfismo usando prototipos.
function Animal() {}
Animal.prototype.speak = function() {
console.log('El animal hace un sonido');
};
function Perro() {}
Perro.prototype = Object.create(Animal.prototype);
Perro.prototype.speak = function() {
console.log('El perro ladra');
};
function Gato() {}
Gato.prototype = Object.create(Animal.prototype);
Gato.prototype.speak = function() {
console.log('El gato maúlla');
};
const perro = new Perro();
const gato = new Gato();
perro.speak(); // El perro ladra
gato.speak(); // El gato maúlla
En el ejemplo anterior, tanto `Perro
` como `Gato
` heredan de `Animal
`, pero cada uno tiene su propia implementación del método `speak
`. Este es un ejemplo clásico de polimorfismo, ya que `speak
` comporta de manera diferente dependiendo del objeto que lo llama.
2. Polimorfismo con Clases ES6
Con la introducción de ES6, podemos usar clases para implementar polimorfismo de una manera más intuitiva.
class Animal {
speak() {
console.log('El animal hace un sonido');
}
}
class Perro extends Animal {
speak() {
console.log('El perro ladra');
}
}
class Gato extends Animal {
speak() {
console.log('El gato maúlla');
}
}
const perro = new Perro();
const gato = new Gato();
perro.speak(); // El perro ladra
gato.speak(); // El gato maúlla
Como puedes ver, el uso de clases ES6 hace el código más legible y fácil de entender. Aquí, `Perro
` y `Gato
` extienden de `Animal` y cada uno sobrescribe el método `speak
`.
3. Polimorfismo de Coerción
El polimorfismo de coerción se refiere a la capacidad de una función para aceptar diferentes tipos de parámetros. En JavaScript, esto es bastante común debido a su sistema de tipos dinámicos.
function add(a, b) {
return a + b;
}
console.log(add(5, 10)); // 15
console.log(add('Hola ', 'Mundo')); // Hola Mundo
En el ejemplo anterior, la función `add` puede aceptar tanto números como cadenas, mostrando así polimorfismo de coerción.
4. Polimorfismo Paramétrico
El polimorfismo paramétrico permite que las funciones trabajen con cualquier tipo de dato sin importar la naturaleza de este. En JavaScript, podemos lograrlo utilizando parámetros genéricos.
function identidad(x) {
return x;
}
console.log(identidad(42)); // 42
console.log(identidad('Hola')); // Hola
La función `identidad` acepta un parámetro de cualquier tipo y simplemente devuelve ese valor, demostrando el polimorfismo paramétrico.
Conclusión
En este tutorial, hemos explorado diferentes formas de implementar polimorfismo en JavaScript. Desde el uso de prototipos hasta las clases ES6, el polimorfismo es una técnica poderosa que puede hacer tu código más flexible y fácil de mantener. Esperamos que este tutorial te haya sido útil y te anime a explorar más sobre el polimorfismo y otros conceptos de la programación orientada a objetos en JavaScript.