The concept of software framework is best understood in the context of software product families. A software product family is a set of applications that can be constructed from a set of shared software assets. The shared assets can be seen as generic building blocks from which applications in the family can be built. The product family concept is very general and does not imply any assumptions about the nature of the building blocks or about their mutual relationships. A software framework is a particular way of organizing the shared assets of a software product family: it defines the type of building blocks that can be provided by the product family and it defines an architecture within which these building blocks are embedded.
The OBS Framework offers building blocks of five different types:
- Design Patterns that describe high-level design solutions to recurring design problems in the framework domain.
- Abstract Interfaces that define abstract services that have to be provided by the framework
- Concrete Components that provide default implementations for some of the services defined by the framework interfaces
- Generator Meta-Components that encapsulate programs to generate application-specific implementations for some of the framework interfaces
- Transformer Meta-Components that encapsulate programs to transform some of the framework components to endow them with application-specific properties
The design patterns are the vehicle through which the architecture pre-defined by the framework is captured. The architecture of a target application to be instantiated from the framework is derived by instantiating one or more framework design patterns. The abstract interfaces and the concrete components support the instantiation of the design pattern and will normally directly appear in the design of a target application. The meta-components do not directly enter the final application but are instead used to generate components that do or to modify existing components so as to make them compatible with the requirements of a particular target application.
The design patterns together with their supporting abstract interfaces and components lead to the definition of a set of abstractions and domain-invariant concepts that represent a vocabulary for describing applications in the domain. These domain abstractions and domain-invariant concepts are listed, together with their definition, in a domain dictionary .
The framework is formally described by a feature model that captures the commonalities and the variability of applications within the framework domain, by a UML class model that describes its architecture, and by a detailed description of the framework class.