Common Lisp Object System
CLOS es el acrónimo inglés de Common Lisp Object System y es una extensión de ANSI Common Lisp para permitir la programación orientada a objetos que ha sido adoptada por otros dialectos de Lisp como EuLisp o Emacs Lisp[1]. Inicialmente fue propuesta como un añadido del lenguaje, pero posteriormente CLOS fue adoptado como parte de estándar ANSI de Common Lisp. CLOS es un lenguaje de programación dinámico dirigido a objetos que difiere mucho de lo que podemos encontrar en lenguajes de programación estáticos orientados a objetos como C++ o Java. CLOS está inspirado en sistemas Lisp orientados a objetos anteriores como MIT Flavors o Common LOOPS, aunque es más genérico que éstos. Precisamente la generalidad de CLOS es la carácterística más dificil de obtener, aunque crear un sistema OO en Lisp es fácil:
Conseguir que Lisp sea orientado a objetos es fácil: se puede hacer en tan sólo dos páginas de código (Paul Graham, 1994). Pero hacer que Lisp sea orientado a objetos y a la vez tan extensible y flexible como el resto de sistema Lisp es más complicado. A pesar de que CLOS es un completo sistema de orientado a objetos, CLOS se implementa siguiendo el modelo de la programación orientada a objetos. La implementación orientada a objetos de CLOS se conoce como CLOS Metaobject Protocol o MOP y permite que el sistema sea extensible y personalizable.[2]