Loading AI tools
lenguaje de programación De Wikipedia, la enciclopedia libre
Common Lisp Object System (CLOS por sus siglas en inglés) es un sistema de objetos. Forma parte del estándar ANSI de Common Lisp. Ha sido adaptado por otros dialectos de Lisp como EuLisp o Emacs Lisp.[1][2] CLOS está inspirado en anteriores sistemas de objetos en Lisp como MIT Flavors o Common LOOPS. Una de las metas de diseño fue que sea compatible con dichos sistemas.[3] CLOS provee al programador la capacidad de modificar y extender su semántica a través de un Protocol de Meta-objetos (MOP por sus siglas en inglés).[4]
CLOS es un sistema de resolución múltiple. Esto significa que los métodos se pueden distinguir según los tipos de todos los argumentos. Muchos lenguajes OO son de resolución simple, sus métodos sólo se distinguen con el primer argumento. Los métodos en CLOS se agrupan en funciones genéricas, colecciones de métodos con el mismo nombre y estructura de argumentos, pero con argumentos de tipos diferentes.
CLOS permite combinar los diferentes métodos asociados a una función genérica bajo diferentes estrategias. El resultado de esta combinación se denomina método efectivo (effective method). La estrategia por defecto tiene el nombre de estándar. Adicionalmente CLOS define las siguientes combinaciones de métodos: progn, +, and, append, list, max, min, or y nconc. El usuario puede definir nuevas combinaciones usando el MOP. La estrategia estándar sigue la siguiente lógica: se elige el método :around
más específico. Es método puede elegir si llamar o no el resto de métodos usando (call-next-method)
; luego se ejecutan todos los métodos :before
de mayor a menor especificidad seguido del método primario más específico y por último todos los métodos :after
de menor a mayor especificidad.
CLOS permite herencia múltiple. Cuando el orden por defecto en que los métodos se ejecutan en herencia múltiple no es correcto, el programador puede resolver el problema del diamante especificando el orden de combinación de los métodos.
CLOS es dinámico, no sólo los contenidos, sino también las estructuras de los objetos se pueden modificar en tiempo de ejecución. CLOS soporta la carga de definiciones de clases al vuelo (incluso cuando las instancias de las clases ya existen) así como el cambio de los miembros de la clase de una instancia dada a través del operador change-class
.
CLOS no es un lenguaje basado en prototipos, las clases tienen que ser definidas antes de que los objetos puedan ser instanciados como miembros de esa clase. Sin embargo existe Sheeple, un sistema orientado a objetos basado en prototipos, que en su propio protocolo de meta-objetos[5]
Fuera del estándar ANSI, hay una extensión de CLOS ampliamente utilizada llamada protocolo de meta-objetos (MOP). EL MOP define una interfaz estándar para apuntalar las implementaciones de CLOS, tratando a las propias clases como instancias de metaclases y permite la definición de nuevas metaclases y la modificación del comportamiento clásico. La flexibilidad de las CLOS-MOP adelanta la Programación Orientada a Aspectos que fue desarrollada más tarde por algunos de los mismos ingenieros, como Gregor Kiczales.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.