GOOPS is based on a “metaobject protocol” (aka “MOP”) derived from the ones used in CLOS (the Common Lisp Object System), tiny-clos (a small Scheme implementation of a subset of CLOS functionality) and STKlos.
GOOPS can be used by application authors at a basic level without any
need to understand what the MOP is and how it works. On the other hand,
the MOP underlies even very simple customizations — such as defining
an initialize method to customize the initialization of instances
of an application-defined class — and an understanding of the MOP
makes it much easier to explain such customizations in a precise way.
And in the long run, understanding the MOP is the key both to
understanding GOOPS at a deeper level and to taking full advantage of
GOOPS' power, by customizing the behaviour of GOOPS itself.