Sobrescritura de Métodos y Propiedades en Clases Derivadas
Clase 17 de 27 • Curso de Programación Orientada a Objetos en Swift
Resumen
¿Qué es la sobreescritura en programación orientada a objetos?
La sobreescritura es uno de los conceptos fundamentales en la programación orientada a objetos. Permite que una subclase pueda proporcionar su propia implementación de un método o propiedad que ya existe en una clase padre. En esencia, la sobreescritura le da a la subclase la habilidad de definir un comportamiento específico que reemplaza al de la superclase.
¿Cómo sobreescribir métodos y propiedades en Python?
Sobreescribir métodos y propiedades implica redefinirlos en una subclase para que esta utilice su propia versión, sin importar la implementación de su clase superior.
class Vehiculo:
def haz_ruido(self):
pass
class Tren(Vehiculo):
def haz_ruido(self):
print("Chucho Chucho")
tren = Tren()
tren.haz_ruido() # Salida: Chucho Chucho
En este ejemplo, Tren
hereda de Vehiculo
y sobreescribe el método haz_ruido
.
¿Cómo se utiliza super()
para extender la funcionalidad?
El uso de super()
permite invocar métodos de la clase padre, facilitando la extensión de funcionalidades sin sobreescribir completamente la implementación existente.
class Coche(Vehiculo):
def __init__(self, velocidad):
self.velocidad = velocidad
def descripcion(self):
return f'Viajando a {self.velocidad} km/h'
class CocheAutomatico(Coche):
def descripcion(self):
return super().descripcion() + ' en modo automático'
coche = CocheAutomatico(100)
print(coche.descripcion()) # Salida: Viajando a 100 km/h en modo automático
Aquí, CocheAutomatico
extiende el método descripcion
de Coche
.
¿Qué es la palabra clave final
y para qué se utiliza?
final
es un modificador que indica que un método o una propiedad no deben ser sobreescritos más abajo en la jerarquía de herencia. Esto garantiza que ninguna subclase pueda alterar una implementación esencial de su clase base.
from typing import final
class Vehiculo:
@final
def tipo_vehiculo(self):
return 'Vehículo'
class Coche(Vehiculo):
# Intentar sobreescribir el método tipo_vehiculo resultará en un error.
pass
En este caso, aplicar @final
asegura que tipo_vehiculo
no pueda ser modificado en Coche
.
¿Cuándo usar la sobreescritura y la relación con otras clases?
La sobreescritura es clave cuando se necesita adaptar o personalizar el comportamiento de un método o propiedad en una subclase. Por ejemplo, una subclase de Vehiculo
puede ser un Coche
, y otro puede ser un Tren
. Cada tipo de vehículo hace ruido de manera distinta, pero comparten el mismo método haz_ruido
.
Ejercicio propuesto
Implementa el método haz_ruido
en una subclase Bicicleta
. ¿Crees que el ruido del Tándem
será igual al de Bicicleta
o necesitará su propia implementación? Explora la posibilidad de sobreescribir o no según tu juicio.
Recuerda, mientras más practiques con herencia y sobreescritura en tus proyectos, más cómodo te sentirás modelando problemas del mundo real en código. ¡Continúa desarrollando tus habilidades!