- Desacoplar una abstracción de su implementación de manera que ambas puedan variar independientemente.
- Publicar la interfaz en una jerarquía de herencias y ocultar la implementación en su propia jerarquía de herencia.
- Además de encapsulación, se usa para aislamiento.
Ejemplo de problema
"El endurecimiento de las arterias del software" ha ocurrido por el uso de subclases de una clase base abstracta para proporcionar implementaciones alternativas. Esto "suelda", en tiempo de compilación, la unión entre la interfaz y la implementación. La abstracción y la implementación no pueden ser extendidas o compuestas de manera independiente.