What is the relationship between the Patterns work and Adaptive Programs?

Propagation patterns are complementary to the design patterns described by Gamma et al. Propagation patterns express groups of collaborating objects for a specific purpose. Propagation patterns are executable and have at least two applications to design patterns: Expressing design patterns for object-oriented software development more precisely and, using design patterns for guiding the design of propagation patterns and their customizers.

Importantly, Patterns for OO programming problems can often be described more succinctly using Adaptive Programming (AP) notations. An outstanding candidate pattern from the GOF book is the Visitor Pattern which gets a significant improvement and concise formalization using adaptiveness. See the visitor usage discussion to see the importance of the visitor pattern.

But there are more applications of adaptiveness to other patterns than the Visitor Pattern. For example, the Builder Pattern can be implemented by using sentences to describe objects in a robust way without referring to specific classes. Or the Prototype Pattern can be implemented by using a traversal specification to define the clone operation. The traversal specification succinctly defines a subgraph which needs to be copied. In general, AP is applicable to design patterns which involve selecting subgraphs from larger graphs. Cloning is only one example. Also, adaptiveness is useful in any design pattern which involves iteration since a traversal specification is "just" a succinct, powerful iteration.

Many design patterns for OOP are directly applicable to AP. For example, the Siemens Reflection Pattern can be used to implement AP. Or the Observer Pattern is useful to separate models from views in AP. In summary, the design pattern idea is useful to AP and in turn, AP provides abstractions which allow to better express Design Patterns for OOP and AP.

Adaptiveness has a very soothing effect on many design tasks in that it simplifies the underlying design patterns. Below we show design patterns for propagation patterns and class dictionaries.

Patterns behind Adaptive Programming (old version)

Patterns behind Adaptive Programming

Adaptive Builder

Adaptive Interpreter

Adaptive Visitor

Consider these adaptive patterns for performing dynamic class migration:

Adaptive Dynamic Subclassing

Adaptive Role Playing

See the Demeter book for further information on propagation patterns and design patterns.