Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Common Lisp Object System
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
'''Common Lisp Object System''' ('''CLOS''' por sus [[acrónimo|siglas]] en [[idioma inglés|inglés]]) es un sistema de [[Programación orientada a objetos|objetos]]. Forma parte del estándar [[ANSI]] de [[Common Lisp]]. Ha sido adaptado por otros dialectos de Lisp como [[EuLisp]] o [[Emacs Lisp]].<ref>«CLOS is a standard. Multiple vendors supply CLOS. CLOS (or parts of it) is being used to add object orientation to other Lisp dialects such as EuLisp or Emacs Lisp». pag. 110 de Veitch (1998).</ref><ref>{{cita web|título=EIEIO (“Enhanced Implementation of Emacs Interpreted Objects”)|url=https://www.gnu.org/software/emacs/manual/html_node/eieio/}}</ref> 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.<ref>{{cita web|apellidos1=Bobrow|nombre1=Daniel|título=CLOS in context: the shape of the design space|url=http://www.dreamsongs.com/Files/clos-book.pdf|editorial=[[MIT Press]]|idioma=inglés|fecha=1993|fechaacceso=13 de marzo de 2015}}</ref> 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).<ref>Ver pag. 108 de Veitch (1998).</ref> == Características == === Resolución múltiple === CLOS es un sistema de [[resolución múltiple]]. Esto significa que los [[método (programación orientada a objetos)|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 [[Función Genérica|funciones genéricas]], colecciones de métodos con el mismo nombre y estructura de argumentos, pero con argumentos de tipos diferentes. === Combinación de métodos === [[Archivo:Method-combination.png|350px|thumb|derecha|Una ilustración que muestra cómo se combinan los métodos en la combinación estándar.]] 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 <code>:around</code> más específico. Es método puede elegir si llamar o no el resto de métodos usando <code>(call-next-method)</code>; luego se ejecutan todos los métodos <code>:before</code> de mayor a menor especificidad seguido del método primario más específico y por último todos los métodos <code>:after</code> de menor a mayor especificidad. === Herencia múltiple === 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. === Dinámico === 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 <code>change-class</code>. === Basado en clases === 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.<ref> https://github.com/sykopomp/sheeple. </ref> === Protocolo de meta-objetos === 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 [[metaclase]]s 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]]. == Referencias == {{Listaref}} == Bibliografía == * DeMichiel, L. G., & Gabriel, R. P. (1987). [https://www.extravagaria.org/Files/ECOOP.pdf The common lisp object system: An overview]. In ''European Conference on Object-Oriented Programming'' (pags. 151-170). Berlin, Heidelberg: Springer Berlin Heidelberg. * Kiczales, G., Des Rivieres, J., & Bobrow, D. G. (1991). ''[https://ldbeth.sdf.org/The_Art_of_the_Metaobject_Protocol.pdf The art of the metaobject protocol]''. MIT press. ISBN 0-262-61074-4. * Keene, S. E. (1989). Object-Oriented programming in Common Lisp; a programmer's guide to CLOS. Addison-Wesley. ISBN 0-201-17589-4. * Bobrow, D. G., Kahn, K., Kiczales, G., Masinter, L., Stefik, M., & Zdybel, F. (1986). [https://dl.acm.org/doi/pdf/10.1145/960112.28700 CommonLoops: Merging Lisp and object-oriented programming]. En ''Conference on Object Oriented Programming Systems Languages and Applications, ACM Sigplan Notices'', ''21''(11), pags. 17-29; Portland, Oregón, Estados Unidos. ISSN 0362-1340. * Veitch, J. (1998). A history and description of CLOS. ''Handbook of Programming Languages 4'', pags. 107-158, ed. Peter H. Salus. Macmillian Technical Publishing. ISBN 1-57870-011-6. {{Control de autoridades}} [[Categoría:Software]] [[Categoría:Lisp]] [[Categoría:Programación orientada a objetos]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Common Lisp Object System
»
Añadir idiomas
Añadir tema