Composición sobre herencia

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 encadena
Con herencia, la subclase queda rígidamente unida al padre: comparte su implementación, y si el padre cambia, el hijo se entera. Es útil para verdaderos «es-un», pero frágil cuando se usa solo para reutilizar: un cambio lejos puede romper todo el árbol.
Composición une
La composición construye un objeto teneniendo otros como partes y delegando en ellos. Un Coche tiene un Motor y le pide que arranque. El motor se puede sustituir, apagar o probar a parte sin tocar al coche. La relación es flexible y visible.
La regla de oro
El principio de diseño «prefiere composición sobre herencia» dice: cuando dudes, no heredes para reutilizar; crea un objeto interno y delega en él. Reserva la herencia para cuando la relación es-un sea genuina y estable.
| Criterio | Elige herencia | Elige composición |
|---|---|---|
| Relación real | es-un genuino y estable | tiene-un / usa-un |
| Flexibilidad | jerarquía fija | piezas intercambiables |
| Acoplamiento | hijo depende del padre | bajo, por interfaz |
| Reutilizar | comportamiento base común | compartir funcionalidad |
| Polimorfismo | sustituir tipos | inyectar componentes |
Un Coche necesita reutilizar la funcionalidad de arranque de un Motor. ¿Qué relación conviene?
Delegación
El objeto contenedor expone su propia interfaz pero reenvía parte del trabajo a sus componentes. Así se pueden intercambiar piezas en tiempo de ejecución (otro motor, otro formato de salida) sin recompilar jerarquías.
Testeabilidad
Con composición puedes meter un motor falso (un stub) en el coche para probarlo sin encender el motor real. El bajo acoplamiento hace que las unidades se puedan aislar y verificar por separado.
El problema del yo-yo
Las jerarquías profundas obligan a saltar entre padre, abuelo y subclase para entender qué pasa: es el «problema del yo-yo». La composición aplana: cada objeto dice claramente qué partes tiene y a quién delega.
La composición suele producir un acoplamiento más bajo entre componentes que la herencia profunda.
Errores frecuentes
- Heredar solo para heredar métodos: acopla tu clase a los detalles internos del padre.
- Crear jerarquías de una sola implementación para tres líneas reutilizadas.
- Confundir composición con agregación sin gestionar el ciclo de vida de las piezas.
Trabajo en equipo de objetos
Sistemas grandes se ven mejor como constelaciones de objetos que se pasan mensajes y colaboran, no como árboles genealógicos. La composición modela esa colaboración con claridad; la herencia, el parentesco.
Asigna cada relación a la técnica apropiada:
Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.
WikipediaComposición sobre herencia: el principio y sus motivaciones.
Tienes un sistema que heredó de «Base de datos» solo para reutilizar un método de conexión. Refactóralo mentalmente a composición: ¿qué objeto inyectarías y qué beneficio obtendrías?
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.