Los primeros que propusieron el desarrollo orientado a objetos sugirieron que los objetos eran la abstracción más adecuada para la reutilización. Sin embargo, la experiencia ha demostrado que los objetos son a menudo de grano muy fino y demasiado especializado para una aplicación particular. Por otro lado, está claro que la reutilización orientada a objetos esta mejor soportada en un proceso de desarrollo orientado a objetos a través de abstracción de grano mayor denominados marcos de trabajo.
Un marco de trabajo también llamado marco de trabajo de aplicación es un diseño de un subsistema formado por una colección de clases concretas y abstractas y la interfaz entre ellas. Los detalles particulares del subsistema de aplicaciones son implementados añadiendo componentes y proporcionando implementaciones concretas de las clases abstractas en el marco de trabajo. Los marcos de trabajo raramente son aplicaciones por sí mismos. Las aplicaciones se constituyen normalmente integrando varios marcos de trabajo. A continuación se describirán tres tipos de marcos de trabajo:
- Marcos de trabajo de infraestructura de sistemas: Estos marcos de trabajo soportan el desarrollo de infraestructuras de sistemas tales como comunicaciones, interfaces de usuarios y compiladores.
- Marcos de trabajo para la integración de middleware: Consiste en un conjunto de estándares y clases de objetos asociados que soportan la comunicación de componentes y el intercambio de información. El COR-BA.COM de Microsoft y el Enterprise Java Beans son ejemplos de este tipo de marcos. Estos marcos proporcionan soporte para modelos de componentes estandarizados.
- Marcos de trabajo de aplicaciones empresariales: Se refieren a dominios de aplicaciones específicos tales como telecomunicaciones o sistemas financieros.
Estos marcos de trabajo encapsulan el conocimiento del dominio de la aplicación y soportan el desarrollo de aplicaciones para los usuarios finales. Tal como el nombre lo dice, un marco de trabajo es una estructura genérica que puede ser extendida para crear un subsistema o aplicación más específico. Este es implementado como una colección de clases de objetos concretas y abstractas. Para extender el marco de trabajo, se tienen que añadir clases concretas que hereden operaciones de las clases abstractas en el marco.