In a framework context, it is necessary to distinguish between two development processes
- The framework creation process is the process whereby the reusable assets (or building blocks) of the framework are created together with the language and tools required to instantiate applications from the framework.
- The framework instantiation process is the process whereby the reusable assets (or building blocks) of the framework are tailored to match the needs of a target application within the framework domainand are used to create the target application.
The next figure illustrates the mutual relationship between the framework creation and the framework instantiation processes.
Framework Creation
The framework creation process can be divided into three phases:
- The domain analysis phase whereby the target domain of the framework is identified and characterized. This phase should normally terminate with the construction of a formal domain model.
- The domain design phase whereby the reusable assets (or building blocks) from which the framework instances are to be built are identified and formal model for them are produced.
- The domain implementation phase whereby the models of the reusable assets (or building blocks) from which the framework instances are to be built are implemented in code. In many cases, the modelling of the building blocks can be done within an environment with autocoding facilities so that this phase will often be very fast.
For the OBS Framework, the output of the domain analysis phase is a formal model of the target domain of the OBS Framework expressed as a feature model.
For the domain design phase, there are three outputs at three levels of abstractions. At the abstract design level, the framework design is captured by a set of design patterns that propose design solutions for recurring design problems in the OBS domain. The design patterns encapsulate reusable architectural solutions for applications within the framework domain. At the architectural design level, the framework is described by a UML class diagram that covers all its concrete and abstract classes. At the detailed design level, the framework is described by a detailed code description automatically generated by the doxygen tool by processing the framework source code.
Note that no design-level model is provided for the framework meta-components since no well-established modelling techniques exist for this type of building blocks. The meta-components are therefore only provided as implementation-level building blocks.
At implementation level, the OBS Framework is implemented as a set of C++ classes and a set of XSL programs. Some of the C++ classes are concrete and implement the framework concrete components, others are abstract and implement the framework abstract interfaces. The XSL programs implement both the Generator Meta-Components and the Transformer Meta-Components.
Framework Instantiation
The framework creation process can be divided into three phases:
- An application modelling phase where a model is of the target application is constructed.
- A building block tailoring phase where the building blocks provided by the framework are adapted to the needs of the target application. The output of this phase is a set of application-specific components.
- A component composition phase where the application-specific components are composed with each other to construct the target application.
The application model is constructed as an instance of the framework model. The application model is expressed as an XML document. The OBS Framework provides an XSD Schema that defines the structure of this document. The definition of the document itself must of course be done by the application designer on the basis of the application requirements. The OBS Framework does not at present support the automated derivation of the application model from the framework model. This is an object of current research and may be provided in future releases.
The OBS Framework supports the following adaptation techniques for tailoring its building blocks to the needs of a target application:
- Component Configuration: the components provided by the OBS Framework or created by extending its concrete and abstract classes, are intended to be configured during the application configuration phase. Component configuration consists in setting the values of the component attributes. Since some component attributes are of class type, this includes the object composition adaptation mechanism.
- Class Extension: the OBS Framework provides a number of C++ classes that can be adapted by extension. This includes both the override of existing methods, the definition of virtual methods, and the addition of new methods.
- Automatic Code Generation: the OBS framework offers generator meta-components that can generate new application-specific classes from a high-level specification provided by the designer. The classes thus generated are guaranteed to be plug-compatible with other OBS Framework classes.
- Aspect Weaving: the OBS framework offers transformer meta-components that implement aspect programs to perform application-specific modifications upon the base classes provided by the framework.
At present, the OBS Framework does not support the component composition phase. This is the phase where the individual components adapted to the specific needs of a target application are composed together to construct the final application executable. Component composition must currently be performed manually. This type of support is an object of current research and may be provided in future releases. Some preliminary work was done in the automated framework instantiation project.