An interactor is an object responsible for providing a user interface to modify another object called its abstraction. It is responsible for rendering/visualizing the state of the abstraction and also providing a set of commands to manipulate the latter. It is like a toolkit widget, though it may be defined by any user interface layer (window system, toolkit, user interface management system.)
An abstraction may be a model or another interactor, thereby allowing cascading of interactors. Examples of abstraction/interactor pairs: integer/slider, program/parse tree editor, parse tree editor/text editor, text editor/window, slider/window, budget/table editor, table editor/window.
An interactor not only renders or transforms the information in an interactor, it also adds some syntactic sugar. E.g: parse tree adds ``if'' and ``then'', sliders and dialog boxes add scrollbars, and windows adds pointers. While transformed information depends on the underlying abstraction, the syntactic sugar does not and can be changed without interacting with the abstraction.
An abstraction provides the same interface as a model.
An interactor indicates which of its fields are dependent fields (that is renderings/transformations of abstraction fields) and which are syntactic sugar. It is an observable.
Abstraction/interactors are like databases/views except that the information in
an abstraction is truly an abstraction of (that is, ``higher level'' than)
the information in an interactor and
also an interactor adds syntactic sugar while a view does not.
Information in the interactor (abstraction) must be parsed (unparsed)
to derive the information in an abstraction (interactor).
A smalltalk view can be considered a combination of a database
view and an interactor.