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 apects
to such manipulation:
Introspection is the ability of a
program to observe and therefore reason about its own
state.
Intercession is the ability of a
program to modify its own execution state or alter its own
interpretation or meaning.
Both apects require a mechanism for
encoding execution state as data; providing such an encoding is called reification