An adaptive program is written in terms of constraints on the customizing context in which the program may be used. The constraints are written so that they only encode necessary dependencies and at the same time they localize information on groups of collaborating classes. Adaptive software is usually written for a given context in mind and therefore it is important that the adaptive program does not use too much information from the current context.
Adaptive software consists of a collection of propagation patterns.
Karl J. Lieberherr and Cun Xiao. Minimizing dependency on class structures with adaptive programs. Doc 21 IEEE Transactions on Software Engineering - Lieberherr, Xiao et al.