Someone else may come up with a better definition, but I think of reflection as the ability to reason about the structures and processes of a programming system within the programming system itself. Examples include the API's to Class objects in SmalltalkLanguage, JavaLanguage and the CommonLispObjectSystem.
--JeffMantei 2000-12-01
I mostly agree with this. I like to distinguish between a ReflectiveSystem? (that contains a description of itself) and a CausallyReflectiveSystem?. Changing the MetaInformation in a ReflectiveSystem? typically merely breaks the system. Changing the MetaInformation in a CausallyReflectiveSystem? causes a corresponding change in the behavior of the system. -- TomStambaugh
The ObjectOrientationFaq? defines ReflectiveSystem?s as "systems with MetaObjectProtocols (not to be confused with reflexive systems, which often refer to systems implemented in terms of themselves, or bootstrapped)", and explains: "In CLOS terminology, an IntrospectiveProtocol? provides a read only capability (e.g. what is this object's class, give info on this class, etc.) and an IntercessoryProtocol? provides a write capability which allows system modification (e.g. add the following method or instance to this class, perform inheritance this way, etc.)."
Resources
A book called TheArtOfTheMetaObjectProtocol
See MetaObjectProtocol.
Discussion
Some issues possibly appropriate to this topic include:
One paper on CLOS (Bobrow, Gabriel, White 1993) mentions the following three aspects of reflection :