El polimorfismo es uno de los pilares fundamentales de la programación orientada a objetos (POO). En términos simples, el polimorfismo permite que una entidad, como una función o un objeto, se comporte de diferentes maneras en diferentes contextos. En Groovy, el polimorfismo se puede lograr principalmente a través de la herencia y la implementación de interfaces.
Conceptos Clave
-
Polimorfismo en Tiempo de Compilación (Sobrecarga de Métodos):
- Permite definir múltiples métodos con el mismo nombre pero con diferentes parámetros.
- La decisión de qué método invocar se toma en tiempo de compilación.
-
Polimorfismo en Tiempo de Ejecución (Sobrescritura de Métodos):
- Permite que una subclase proporcione una implementación específica de un método que ya está definido en su superclase.
- La decisión de qué método invocar se toma en tiempo de ejecución.
Ejemplo Práctico
Sobrecarga de Métodos
class Calculadora {
int sumar(int a, int b) {
return a + b
}
double sumar(double a, double b) {
return a + b
}
int sumar(int a, int b, int c) {
return a + b + c
}
}
def calc = new Calculadora()
println calc.sumar(2, 3) // Salida: 5
println calc.sumar(2.5, 3.5) // Salida: 6.0
println calc.sumar(1, 2, 3) // Salida: 6Sobrescritura de Métodos
class Animal {
void hacerSonido() {
println "El animal hace un sonido"
}
}
class Perro extends Animal {
@Override
void hacerSonido() {
println "El perro ladra"
}
}
class Gato extends Animal {
@Override
void hacerSonido() {
println "El gato maúlla"
}
}
def animales = [new Perro(), new Gato(), new Animal()]
animales.each { animal ->
animal.hacerSonido()
}
// Salida:
// El perro ladra
// El gato maúlla
// El animal hace un sonidoEjercicio Práctico
Ejercicio 1: Sobrecarga de Métodos
- Crea una clase
Matematicacon métodos sobrecargados para calcular el área de diferentes formas geométricas:- Un método para calcular el área de un círculo (
areaCirculo(double radio)). - Un método para calcular el área de un rectángulo (
areaRectangulo(double largo, double ancho)). - Un método para calcular el área de un triángulo (
areaTriangulo(double base, double altura)).
- Un método para calcular el área de un círculo (
Ejercicio 2: Sobrescritura de Métodos
- Crea una clase
Vehiculocon un métodomover(). - Crea dos subclases
CocheyBicicletaque sobrescriban el métodomover()con implementaciones específicas. - Crea una lista de objetos
Vehiculoque contenga instancias deCocheyBicicleta, y llama al métodomover()en un bucle para demostrar el polimorfismo.
Soluciones
Solución Ejercicio 1
class Matematica {
double areaCirculo(double radio) {
return Math.PI * radio * radio
}
double areaRectangulo(double largo, double ancho) {
return largo * ancho
}
double areaTriangulo(double base, double altura) {
return 0.5 * base * altura
}
}
def mat = new Matematica()
println mat.areaCirculo(5) // Salida: 78.53981633974483
println mat.areaRectangulo(4, 5) // Salida: 20.0
println mat.areaTriangulo(3, 4) // Salida: 6.0Solución Ejercicio 2
class Vehiculo {
void mover() {
println "El vehículo se está moviendo"
}
}
class Coche extends Vehiculo {
@Override
void mover() {
println "El coche está conduciendo"
}
}
class Bicicleta extends Vehiculo {
@Override
void mover() {
println "La bicicleta está pedaleando"
}
}
def vehiculos = [new Coche(), new Bicicleta(), new Vehiculo()]
vehiculos.each { vehiculo ->
vehiculo.mover()
}
// Salida:
// El coche está conduciendo
// La bicicleta está pedaleando
// El vehículo se está moviendoResumen
En esta sección, hemos explorado el concepto de polimorfismo en Groovy, tanto en tiempo de compilación como en tiempo de ejecución. Hemos visto cómo la sobrecarga y la sobrescritura de métodos permiten que las clases y los objetos se comporten de diferentes maneras en diferentes contextos. Los ejercicios prácticos proporcionan una oportunidad para aplicar estos conceptos y reforzar el aprendizaje. En el próximo módulo, profundizaremos en la encapsulación y cómo proteger los datos dentro de nuestras clases.
Curso de Programación Groovy
Módulo 1: Introducción a Groovy
Módulo 2: Sintaxis de Groovy y Características del Lenguaje
Módulo 3: Programación Orientada a Objetos en Groovy
Módulo 4: Características Avanzadas de Groovy
Módulo 5: Groovy en la Práctica
- Entrada/Salida de Archivos
- Trabajando con XML y JSON
- Acceso a Bases de Datos
- Desarrollo Web con Groovy
Módulo 6: Pruebas y Depuración
Módulo 7: Ecosistema y Herramientas de Groovy
- Herramienta de Construcción Gradle
- Framework de Pruebas Spock
- Framework Grails
- Otras Bibliotecas y Herramientas de Groovy
Módulo 8: Mejores Prácticas y Temas Avanzados
- Estilo de Código y Convenciones
- Optimización del Rendimiento
- Consideraciones de Seguridad
- Concurrencia en Groovy
