Está en la página 1de 1

Exposición de programación

¿Cuál es la diferencia entre polimorfismo y sobrecarga?


El polimorfismo y la sobrecarga son dos conceptos importantes de la programación orientada a objetos
(OOP). Ambos se refieren a la capacidad de usar el mismo nombre de método para diferentes
comportamientos, pero hay algunas diferencias clave entre ellos.

El polimorfismo significa que un método puede tener diferentes implementaciones según el tipo de
objeto que lo invoca. Por ejemplo, si tenemos una clase abstracta Figura con un método abstracto
Dibujar, y dos clases derivadas Triangulo y Cuadrado que sobrescriben el método Dibujar, podemos
usar una variable de tipo Figura para referirnos a cualquier objeto de tipo Triangulo o Cuadrado, y
llamar al método Dibujar apropiado según el tipo real del objeto. Esto se llama polimorfismo de
subtipo o polimorfismo dinámico, porque se resuelve en tiempo de ejecución.

La sobrecarga significa que un método puede tener diferentes firmas (número o tipo de parámetros)
dentro de la misma clase, y se elige el método adecuado según los argumentos que se pasan al
invocarlo. Por ejemplo, si tenemos una clase A con dos métodos llamados Metodo, uno que no tiene
parámetros y otro que tiene un parámetro de tipo int, podemos llamar al método Metodo con o sin
argumentos, y se ejecutará el método correspondiente. Esto se llama sobrecarga de métodos o
polimorfismo estático, porque se resuelve en tiempo de compilación.

En resumen, la diferencia entre polimorfismo y sobrecarga es que el polimorfismo se refiere a la


aplicación de implementaciones específicas a una interfaz o una clase base más genérica, mientras
que la sobrecarga se refiere a la definición de varios métodos con el mismo nombre, pero con
diferentes firmas dentro de la misma clase.

¿Qué es el polimorfismo de inclusión?


El polimorfismo de inclusión es un tipo de polimorfismo que se basa en la herencia entre clases.
Consiste en que una clase derivada puede redefinir un método de su clase base, manteniendo la misma
firma (nombre y parámetros), pero cambiando su comportamiento. De esta forma, se puede usar una
variable de tipo de la clase base para referirse a objetos de la clase derivada, y al llamar al método
redefinido, se ejecutará el de la clase derivada, según el tipo real del objeto. (Insertar ejemplo).

El ejemplo muestra una clase abstracta llamada Animal, que tiene un método abstracto llamado
hacerSonido. Este método no tiene una implementación en la clase Animal, sino que se deja para que
las subclases lo redefinan según su propio comportamiento. Las subclases Perro y Gato heredan de la
clase Animal y redefinen el método hacerSonido para que imprima el sonido característico de cada
animal. Luego, en la clase Principal, se crean objetos de tipo Perro, Gato y Animal, y se invoca el método
hacerSonido para cada uno de ellos.

Lo interesante de este ejemplo es que se puede crear un objeto de tipo Animal que referencia a un
objeto de tipo Perro o Gato, y al invocar el método hacerSonido se ejecuta el de la subclase
correspondiente. Esto es lo que se conoce como polimorfismo de inclusión, ya que permite que un
objeto pueda tomar diferentes formas según la referencia que tenga, y que al llamar a un método se
ejecute el más específico. Esto facilita la reutilización y la extensibilidad del código, ya que se puede
tratar a los objetos de forma genérica o específica según convenga.

También podría gustarte