La herencia y el polimorfismo son dos conceptos fundamentales en la programación orientada a objetos (POO). Estos conceptos se utilizan para crear programas más eficientes y reutilizables.
18.1.1 Herencia
La herencia es un mecanismo que permite a una clase adquirir las propiedades y métodos de otra clase. La clase que dona las propiedades y los métodos se conoce como clase base o clase principal, mientras que la clase que recibe las propiedades y métodos se conoce como clase derivada o clase secundaria.
Por ejemplo, imagina que tenemos una clase 'Animal' con propiedades como 'nombre', 'edad' y métodos como 'comer' y 'dormir'. Ahora queremos crear una nueva clase 'Perro' que tenga todas las propiedades y métodos de la clase 'Animal', pero también tenga algunas propiedades y métodos adicionales como 'raza' y 'ladrido'. En lugar de reescribir todas las propiedades y métodos de la clase 'Animal' en la clase 'Perro', podemos simplemente hacer que la clase 'Perro' herede de la clase 'Animal'. Esto se hace mediante la palabra clave 'extend' en muchos lenguajes de programación.
La herencia permite a los programadores crear clases que se basan en clases existentes. Esto permite a los programadores reutilizar el código existente, lo que hace que el desarrollo de software sea más rápido y eficiente.
18.1.2 Polimorfismo
El polimorfismo es un concepto que permite que objetos de diferentes clases sean tratados como objetos de una clase común. Esto es especialmente útil cuando se trabaja con herencia.
Por ejemplo, supongamos que tenemos una clase 'Animal' con un método 'hablar'. Ahora tenemos varias clases derivadas como 'Perro', 'Gato' y 'Pájaro', cada una con su propia implementación del método 'hablar'. Si tenemos una serie de objetos 'Animales', podemos llamar al método 'hablar' en cada objeto sin conocer la clase específica del objeto. Esto es polimorfismo.
El polimorfismo permite a los programadores escribir programas que procesen objetos de clases que comparten la misma superclase de maneras que dependen del tipo específico de objeto que se procesa. Esto puede hacer que los programas sean más flexibles y extensibles.
18.1.3 Herencia y polimorfismo en la práctica
En la práctica, la herencia y el polimorfismo se utilizan para crear programas que sean fáciles de entender, mantener y ampliar. Permiten a los programadores crear estructuras de clases que reflejan la estructura del problema que intentan resolver.
Por ejemplo, supongamos que estamos creando un programa para un zoológico. Podemos tener una clase 'Animal' con propiedades y métodos comunes a todos los animales. Luego podemos tener clases derivadas para cada tipo de animal, como 'León', 'Elefante' y 'Pingüino', cada una con sus propias propiedades y métodos específicos. Esto hace que el programa sea fácil de entender, porque la estructura del código refleja la estructura del zoológico.
Además, si queremos agregar un nuevo tipo de animal al programa, simplemente podemos crear una nueva clase que herede de la clase 'Animal'. Esto hace que el programa sea fácil de ampliar porque no necesitamos modificar el código existente para agregar nuevas funciones.
Finalmente, si queremos realizar una acción en todos los animales del zoológico, podemos usar el polimorfismo para tratar a todos los animales como objetos de la clase 'Animal'. Esto hace que el programa sea fácil de mantener porque podemos realizar cambios en un solo lugar y reflejar esos cambios en todo el programa.
En resumen, la herencia y el polimorfismo son herramientas poderosas que los programadores pueden utilizar para crear programas eficientes, reutilizables y mantenibles.