In this section, we assume that each object may be associated with at most one meta-object. We say the object is reflective if it is associated with a meta-object. It does not matter, at this point, how the association is specified. It may be determined at compile time, with special declarations, as in OpenC++ [1], or at run-time, as in MetaXa [3].
Interactions from the base level to the meta level can be implicit or explicit. Interception of operations is an example of implicit interaction, since the base level may be unaware of its occurrence. Explicit interactions may be carried out by direct invocations of methods of meta-object.