
Vamos primero con la composición, la composición es una técnica en la cual descomponemos objetos para reutilizar funcionalidad. De esta forma componiendo objetos podemos obtener funcionalidad más compleja y completa.
Ventajas:
- Reutilización de caja negra, los detalles internos de los objetos no son visibles.
- La dependencia de objetos se puede definir dinamicamente si utilizamos interfaces. Disminuyendo el acoplamiento y aumentando la reutilización.
- Ayuda a mantener cada clase encapsulada y centrada en una sola tarea. De esta manera, nuestra clases y jerarquías de clases permanecerán pequeñas y sera menos probable que se conviertan en monstruos inmanejables.

Desventajas:
- Requiere más diseño (que tampoco es tan malo)
El mecanismo de herencia lo conocemos bien y también tiene sus ventajas y desventajas
Ventaja:
- Es facil de usar lo provee los lenguajes.
- Es más fácil modificar la implementación que esta siendo reutilizada.
Desventaja:
- Reutilización de caja blanca, los hijos pueden modificar variables internas del padre (si están protegidas o publicas), la herencia suele decirse rompe el encapsulamiento.
- Existe más acoplamiento ya que cualquier cambio en el padre obligara a cambiar la subclase.
Según lo dicho podemos afirmar:
"Favorecer la composición de objetos frente a la herencia de clases."
