Adaptation is defined as the process of changing to suit different conditions in the environment. In other words, adaptation is a change in the structure, function or behaviour of the system in order to meet the current context. A ubiquitous system refers to the manner in which computer systems adapt to changes in the physical and virtual environments of computing platforms and communication networks, whilst enabling better interaction between humans and computers. The development and implementation of adaptive systems is rooted in the study of evolution and adaptation in the natural environment; accordingly, new methods have been continuously developed to enable computational adaptation. Adaptive computing is thus generally focused on the rapidly growing areas of, and the increasing demands for, ubiquitous computing and autonomic computing. This study first describes the notion of adaptation, before explaining adaptive systems and discussing adaptation in ubiquitous computing. The adaptation process in adaptive systems that occur in runtime stages is then presented. Moreover, the classification of adaptation is discussed in terms of questions relating to who, why and what, as well as how the adaptation occurs. Finally, different adaptation approaches are demonstrated and compared in order to select the most suitable approach for ubiquitous systems.