Design patterns are one of the building blocks that are provided by the OBS Framework. A design pattern proposes a solution to a recurring design problem (see: Gamma et al, "Design Patterns", Addison-Wesley). The OBS Framework uses design patterns to express the framework design at the abstract design level. It offers a catalogue of design patterns that address typical design problems that are encountered in on-board software development. In many cases, the OBS Design Patterns represent specializations to the OBS domain of more general design patterns proposed elsewhere. Typical sources for these higher level design patterns are the catalogue of Gamma et al and the design patterns of the AOCS Framework (see: A. Pasetti, Embedded Control Systems and Software Frameworks, Springer-Verlag).
The OBS Design Patterns are intended to serve four purposes. Firstly, they must aid developers of software frameworks or software applications for on-board systems to quickly identify design problems and to define high-quality solutions for them. In order to optimally fulfill this function, the OBS design patterns are defined at a lower level of abstraction than is the case for other catalogues of design patterns (typically, those of Gamma et al).
Secondly, design patterns indirectly define a vocabulary of domain-specific terms that can be used to describe applications within the framework domain. In the case of the OBS Design Patterns, and in order to better assist OBS software developers, definition of this vocabulary is made explicit and is contained in a domain dictionary.Thirdly, definition of design patterns leads to the identification of a number of abstract interfaces and concrete components that are necessary to support their implemenation at architectural level.
Finally, systematic use of design patterns helps achieve consistency of design as it ensures that similar problems in different parts of the same application or set of applications have the same solution. This makes the design easier to understand, modify and document.
The OBS Design Patterns are described following a fixed format that is loosely based on that introduced by Gamma et al and which is now widely accepted as a de facto standard. Modifications are however introduced in order to allow traceability to the framework classes and to the domain dictionary entries. More specifically, the description of a design pattern is organized under the following headings:
- Intent: A brief statement of the purpose served by the design pattern.
- Based On: The higher-level patterns upon which the design pattern is based.
- Dictionary Entries: The entries in the domain dictionary that are introduced to support the design pattern.
- Motivation: Typical example situations where application of the design pattern is beneficial.
- Structure: A description of the pattern structure supported by a graphical representation using UML class diagrams.
- Participants: The classes and objects that enter in the design pattern and their responsibilities.
- Collaborations: Typical interaction scenarios for the design pattern participants.
- Consequences: Discussion of the design and implementation implications of using the design pattern.
- Applicability: Typical situations to which the design pattern can be benefically applied.
- Implementation: Typical implementation scenarios for the design pattern.
- Framework Mapping: The OBS Framework classes that model the abstract interfaces or concrete components required to support implementation of the design pattern.
- Sample Code: Code fragments (using a C++ syntax) illustrating how the design pattern can be implemented.
- Remarks: Comments that do not fall under any of the other design pattern description categories.
- Author: The person who introduced the design pattern and wrote the pattern description.
- Last Modified: The date when the design pattern description was last modified.
The design pattern in the catalogue are listed in the side bar. Their descriptions can be accessed by clicking on the items in the side bar. An overview of all the design patterns can be accessed from here.