Reflection is the ability of a program to manipulate as data something representing the state of the program during its own execution.
Reification is the process to transform implicit to explicit (objects)
A system having itself as application domain and that is causally connected with this domain can be qualified as a reflective system Maes'87
How does it access internal object state?
Accessing and setting object state
Object >> instVarAt: aNumber
Object >> instVarAt: aNumber put: anObject
Object >> instVarNamed: aString
Object >> instVarNamed: aString put: anObjectpt := 10@3.
pt instVarNamed: 'x'.
> 10
pt instVarNamed: 'x' put: 33.
pt
> 33@3Object >> class'hello' class
(10@3) class
Smalltalk class
Class class
Class class class
Class class class classOrderedCollection allSuperclasses size.
OrderedCollection allSelectors size.
OrderedCollection allInstVarNames size.
OrderedCollection selectors size.
OrderedCollection instVarNames size.
OrderedCollection subclasses size.
OrderedCollection allSubclasses size.
OrderedCollection linesOfCode.SystemNavigation default browseAllImplementorsOf: #,
Object >> perform: aSymbol
Object >> perform: aSymbol with: arg5 factorial
5 perform: #factorial
CompiledMethod >> valueWithReceiver:arguments:(Integer>>#factorial)
valueWithReceiver: 5 arguments: #()(SmallInteger>>#factorial)
valueWithReceiver: 5 arguments: #()/