- Software Reuse
- Software Product Lines
- Modeling Requirements Variability in Software Product Lines: Feature Modeling
- Modeling Design Variability in Software Product Lines
- Reusable Design Patterns
- Modeling Single Systems with UML
- COMET: A UML-Based Software Design Method for Single Systems
- Modeling Software Product Lines with UML
- UML as a Standard
- Related Texts
- Summary
1.5 Reusable Design Patterns
A different approach for providing design reuse is through design patterns. A design pattern describes a recurring design problem to be solved, a solution to the problem, and the context in which that solution works (Buschmann et al. 1996; Gamma et al. 1995). The description specifies objects and classes that are customized to solve a general design problem in a particular context. A design pattern is a larger-grained form of reuse than a class because it involves more than one class and the interconnection among objects from different classes. A design pattern is sometimes referred to as a microarchitecture.
After the original success of the design pattern concept, other kinds of patterns were developed. The main kinds of reusable patterns are
-
Design patterns. In a widely cited book (Gamma et al. 1995), design patterns were described by four software designersErich Gamma, Richard Helm, Ralph Johnson, and John Vlissideswho were named in some quarters as the "gang of four." A design pattern is a small group of collaborating objects.
-
Architectural patterns. This work was described by Buschmann et al. (1996) at Siemens. Architectural patterns are larger-grained than design patterns, addressing the structure of major subsystems of a system.
-
Analysis patterns. Analysis patterns were described by Fowler (2002), who found similarities during analysis of different application domains. He described recurring patterns found in object-oriented analysis and described them with static models, expressed in class diagrams.
-
Product linespecific patterns. These are patterns used in specific application areas, such as factory automation (Gomaa 1998) or electronic commerce.
-
Idioms. Idioms are low-level patterns specific to a programming languagefor example, Java or C++. These patterns are closest to code, but they can be used only by applications that are coded in the same programming language.
From the perspective of software product lines, the biggest benefit can usually be obtained through the reuse of software architectural patterns, which is described in more detail in Chapter 10.