Herencia y polimorfismo

Mapa conceptual
- Programacion OO
- Clases
- Objetos
- Atributos
- Metodos self
- Encapsulamiento
- Public
- Private
- Properties
- Herencia
- Polimorfismo
- Abstractas
- Interfaces
- Composicion
- Sobre herencia
- Delegacion
- Acoplamiento
- Proyecto
- Paquetes
- Modulos
- Convenciones
- Clases
Herencia
Una clase puede heredar de otra: la subclase (hijo) recibe los atributos y métodos de la superclase (padre) y puede añadir los propios o reescribir los heredados. Se expresa indicando el padre entre paréntesis al definir la clase.
Override y super
- Override (redefinir): la subclase ofrece su versión de un método del padre, que gana al invocarse.
- super(): permite llamar a la versión del padre desde el override, reutilizando en vez de duplicar.
Polimorfismo
Polimorfismo es que distintos objetos respondan al MISMO mensaje con comportamiento propio. Una lista [perro, gato, pajaro] puede recibir un bucle que llame a hablar() en cada elemento sin preguntar de qué tipo es. El código depende de la interfaz, no del tipo concreto.
Sustituibilidad
El principio de sustitución de Liskov: donde se espera un Animal, debería poder colocarse cualquier subtipo sin romper el programa. Si un «Pinguino» no puede volar aunque vuele() esté en el padre, la jerarquía está mal diseñada.
| Concepto | Qué es | Para qué sirve |
|---|---|---|
| Herencia | subclase recibe lo de la superclase | no repetir |
| Override | redefinir un método heredado | especializar |
| super() | llamar al método del padre | reutilizar y extender |
| Polimorfismo | mismo mensaje, respuesta según tipo | código genérico y extensible |
¿Qué permite el polimorfismo en un bucle que llama a dibujar() sobre formas distintas?
Herencia múltiple
Una clase puede heredar de varias. Da flexibilidad pero introduce el problema del diamante: ¿qué versión de un método se usa? Python lo resuelve con un orden lineal (MRO). Como regla, evita herencia múltiple profunda y prefiere composición.
Cuándo NO heredar
Solo tiene sentido heredar cuando hay una relación es-un real y compartida: un Coche ES-un Vehículo. Heredar solo para reutilizar código, cuando no hay esa relación, produce jerarquías frágiles; mejor composición (tema de la siguiente lección).
Gracias al polimorfismo, una función que recibe un Animal puede funcionar con subtipos que se creen en el futuro sin modificarse.
Duck typing sin herencia
En Python a menudo no hace falta heredar una base común: basta con que el objeto implemente el método esperado (duck typing, «si camina como pato...»). El polimorfismo no exige una jerarquía formal, solo una interfaz compartida.
Errores frecuentes
- Crear jerarquías enormes heredando solo para no copiar código.
- Violar Liskov: una subclase que rompe lo que el padre promete.
- Abusar de isinstance en vez de delegar el comportamiento en cada tipo.
Clasifica cada situación:
Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.
Real PythonHerencia frente a composición, con ejemplos.
Modela una jerarquía de medios de pago (tarjeta, transferencia, efectivo) con un método procesar(). Explica dónde aplica polimorfismo y por qué NO heredarías efectivo de tarjeta.
Tu texto se guarda sólo en este dispositivo.
Python: ClassesTutorial oficial de clases en Python 3.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.