En la programación orientada a objetos (POO), el polimorfismo se refiere a la capacidad de un objeto para adoptar más de una forma. El término procede de las palabras griegas “poli” (que significa “muchos”) y “morf” (que significa “formas”) y muestra cómo los objetos polimórficos pueden ejecutar distintas operaciones, según el contexto.
La programación orientada a objetos es un enfoque de programación centrado en el uso de objetos. Esencialmente, los objetos se definen por la forma en que se comportan, también conocida como método y sus atributos. Con la programación orientada a objetos, los programadores definen y diferencian aún más los objetos creando clases de objetos. Java también permite la creación de una subclase, que es una clase de nueva creación que hereda atributos de una clase ya establecida. La clase original de la que se copiaron estos atributos se denominan superclases.
¿Cuáles son los tipos de polimorfismo en Java?
Se trata de uno de los conceptos básicos de la programación orientada a objetos. Permite a los programadores escribir código coherente que puede comportarse de forma diferente en función de la superclase o subclase con la que interactúa el método u objeto.
Existen dos tipos en Java:
-
Polimorfismo en tiempo de compilación
También conocido como polimorfismo estático, este tipo de polimorfismo se resuelve durante la compilación del código cuando éste se convierte en instrucción de máquina. Normalmente se consigue mediante sobrecarga cuando varios métodos de la misma clase tienen el mismo nombre pero parámetros diferentes. Esto permite a una clase realizar una operación similar de forma diferente, dependiendo de la entrada. El polimorfismo en tiempo de compilación ofrece tiempos de ejecución más rápidos y reutilización porque el método que se va a ejecutar se determina en tiempo de compilación. Sin embargo, carece de flexibilidad, ya que todas las posibles instrucciones de método deben conocerse en tiempo de compilación, lo que la hace menos adaptable a los cambios.
-
Polimorfismo en tiempo de ejecución
El polimorfismo en tiempo de ejecución, también conocido como enlace dinámico o enlace tardío, es un tipo de polimorfismo que se resuelve durante la ejecución del programa. Este tipo de polimorfismo se consigue normalmente mediante la sobreescritura de métodos, en la que una subclase proporciona una implementación específica de un método que ya está definido en su superclase. El método a ejecutar se determina en tiempo de ejecución, lo que permite una mayor adaptabilidad y flexibilidad en el código. Sin embargo, esto conduce a tiempos de ejecución más lentos que el polimorfismo en tiempo de compilación debido a que la máquina determina el método en tiempo de ejecución.
¿Qué ventajas tiene?
-
Reutilización
Permite diseñar código más flexible y reutilizable. Permite a los programadores crear código que funcionará con objetos independientemente de la clase específica de cada objeto.
-
Flexibilidad
En lugar de tener que modificar los códigos, el polimorfismo permite a los programadores ampliar la funcionalidad fácilmente.
-
Código simplificado
Permite a los programadores crear código más conciso. Los códigos polimórficos son sencillos porque mantienen la instrucción inicial exacta pero tienen la capacidad de cambiarse a sí mismos.
¿Qué inconvenientes tiene?
-
Problemas de rendimiento
Una máquina puede tener dificultades para ejecutar un código polimórfico, especialmente cuando se vuelve demasiado complejo.
-
Difícil de aplicar
Los códigos polimórficos son más difíciles de implementar debido a la cantidad de variables.
Conclusión
Como uno de los elementos centrales de la programación orientada a objetos, el polimorfismo ofrece a los programadores una forma de crear código flexible que puede ampliarse o adaptarse fácilmente. El polimorfismo simplifica la interacción entre métodos y clases para garantizar un código más coherente, flexible y reutilizable. Comprender y aplicar correctamente el polimorfismo puede mejorar la eficacia de la codificación y la programación.