Figure 1: A Layered View of the Adaptive Application
An adaptive application is one in which the application changes its behaviour according to the perceived constraints in the environment, so as to maintain the semantics of the application for the user.If we take the above definition as our starting point, then we can immediately break the problem of designing an adaptive application into various stages. The constraints in the environment for the application should first be determined. For mobile computing applications, the likely constraints are network quality of service, battery power and display capabilities.
We must next define the semantics of the application. What is the application trying to achieve? This is user and task specific, and can vary from context to context. As we will argue, the more generic the application, the more difficult it is to determine the application semantics. Having made a best guess at the semantics, a design goal is to ensure that the semantics of the application remain invariant across the constraint-reacting behaviours of the application. By doing so, we hope that the utility of the application to the user remains high.
In order to maintain the semantics, the changes in behaviour of the application should ensure that the application continues to work whilst adapting to the changing constraints. If the behaviour is changing to adapt to a restriction of some needed resource, such as bandwidth, the change should inflict the minimum damage upon the essential functionality of the application. This leads us to a solution in which the implementation of the application should be opened up so as to allow the choice of some equivalent but less resource-hungry implementation. We thus come to the first design point in our methodology -