Computational Reflection [21,33] is a technique that allows a system to maintain information about itself (meta-information) and use this information to change its behavior (adapt).
This is achieved by processing in two well-defined levels: functional level (also known as base level or application level) and management (or meta) level. Aspects of the base level are represented as objects in the meta level, in a process called reification (Section 2.1). Meta-level architectures are discussed in Section 2.2 and reflective languages in Section 2.3. Finally, Section 2.4 shows the use of computational reflection in the structuring and implementation of system-oriented mechanisms.