Reflection is the ability of a program to manipulate as data, something representing the state of the program during its own execution. There are two aspects of such manipulation:introspection and intercession. Both aspects require a mechanism for encoding execution state as data; providing such an encoding is called reification [Maes 1987].