fbpx
Wikipedia

Common Lisp Object System

Common Lisp Object System (CLOS por sus siglas en inglés) 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. Uno de las metas de diseño fue que sea compatible con estos 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]

Características

Resolución múltiple

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.

Combinación de métodos

 
Una illustración que muestra como 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 :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.

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 change-class.

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 protipos, que en su propio protocolo de meta-objetos[5]

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 metaclases y permite la definición de nuevas metaclases y la modificación del comportamiento cá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

  1. "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." pg 110 of Veitch 1998
  2. «EIEIO (“Enhanced Implementation of Emacs Interpreted Objects”)». 
  3. Bobrow, Daniel (1993). «CLOS in context: the shape of the design space» (en inglés). MIT Press. Consultado el 13 de marzo de 2015. 
  4. pg 108 of Veitch 1998
  5. https://github.com/sykopomp/sheeple

Enlaces externos

En inglés:

  • The Common Lisp Object System: An Overview por Richard P. Gabriel y Linda DeMichiel proveeo una buena introducción a la motivación de definir clases por medio de funciones genéricas.
  • Kiczales, des Rivieres, y Bobrow, The Art of the Metaobject Protocol. 1991, MIT Press. ISBN 0-262-61074-4
  • Keene, Sonya. Object-oriented Programming in Common Lisp: A Programmer's Guide to CLOS. 1988, Addison-Wesley. ISBN 0-201-17589-4.
  • "CommonLoops: merging Lisp and object-oriented programming", por Daniel G. Bobrow, Kenneth Kahn, Gregor Kiczales, Larry Masinter, Mark Stefik, Frank Zdybel. 1986, Portland, Oregón, Estados Unidos. Páginas 17 - 29 de la Conference on Object Oriented Programming Systems Languages and Applications, ISSN 0362-1340.
  • "A History and Description of CLOS", por Jim Veitch. Páginas 107-158 del Handbook of Programming Languages, Volume IV: Functional and Logic Programming Languages, ed. Peter H. Salus. 1998 (1st edition), Macmillian Technical Publishing; ISBN 1-57870-011-6
  •   Datos: Q252340

common, lisp, object, system, clos, siglas, inglés, sistema, objetos, forma, parte, estándar, ansi, common, lisp, sido, adaptado, otros, dialectos, lisp, como, eulisp, emacs, lisp, clos, está, inspirado, anteriores, sistemas, objetos, lisp, como, flavors, comm. Common Lisp Object System CLOS por sus siglas en ingles un sistema de objetos Forma parte del estandar ANSI de Common Lisp Ha sido adaptado por otros dialectos de Lisp como EuLisp o Emacs Lisp 1 2 CLOS esta inspirado en anteriores sistemas de objetos en Lisp como MIT Flavors o Common LOOPS Uno de las metas de diseno fue que sea compatible con estos sistemas 3 CLOS provee al programador la capacidad de modificar y extender su semantica a traves de un Protocol de Meta objetos MOP por sus siglas en ingles 4 Indice 1 Caracteristicas 1 1 Resolucion multiple 1 2 Combinacion de metodos 1 3 Herencia multiple 1 4 Dinamico 1 5 Basado en clases 1 6 Protocolo de meta objetos 2 Referencias 3 Enlaces externosCaracteristicas EditarResolucion multiple Editar CLOS es un sistema de resolucion multiple Esto significa que los metodos se pueden distinguir segun los tipos de todos los argumentos Muchos lenguajes OO son de resolucion simple sus metodos solo se distinguen con el primer argumento Los metodos en CLOS se agrupan en funciones genericas colecciones de metodos con el mismo nombre y estructura de argumentos pero con argumentos de tipos diferentes Combinacion de metodos Editar Una illustracion que muestra como se combinan los metodos en la combinacion estandar CLOS permite combinar los diferentes metodos asociados a una funcion generica bajo diferentes estrategias El resultado de esta combinacion se denomina metodo efectivo effective method La estrategia por defecto tiene el nombre de estandar Adicionalmente CLOS define las siguientes combinaciones de metodos progn and append list max min or y nconc El usuario puede definir nuevas combinaciones usando el MOP La estrategia estandar sigue la siguiente logica se elige el metodo around mas especifico Es metodo puede elegir si llamar o no el resto de metodos usando call next method luego se ejecutan todos los metodos before de mayor a menor especificidad seguido del metodo primario mas especifico y por ultimo todos los metodos after de menor a mayor especificidad Herencia multiple Editar CLOS permite herencia multiple Cuando el orden por defecto en que los metodos se ejecutan en herencia multiple no es correcto el programador puede resolver el problema del diamante especificando el orden de combinacion de los metodos Dinamico Editar CLOS es dinamico no solo los contenidos sino tambien las estructuras de los objetos se pueden modificar en tiempo de ejecucion CLOS soporta la carga de definiciones de clases al vuelo incluso cuando las instancias de las clases ya existen asi como el cambio de los miembros de la clase de una instancia dada a traves del operador change class Basado en clases Editar 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 protipos que en su propio protocolo de meta objetos 5 Protocolo de meta objetos Editar Fuera del estandar ANSI hay una extension de CLOS ampliamente utilizada llamada protocolo de meta objetos MOP EL MOP define una interfaz estandar para apuntalar las implementaciones de CLOS tratando a las propias clases como instancias de metaclases y permite la definicion de nuevas metaclases y la modificacion del comportamiento casico La flexibilidad de las CLOS MOP adelanta la Programacion Orientada a Aspectos que fue desarrollada mas tarde por algunos de los mismos ingenieros como Gregor Kiczales Referencias Editar 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 pg 110 of Veitch 1998 EIEIO Enhanced Implementation of Emacs Interpreted Objects Bobrow Daniel 1993 CLOS in context the shape of the design space en ingles MIT Press Consultado el 13 de marzo de 2015 pg 108 of Veitch 1998 https github com sykopomp sheepleEnlaces externos EditarEn ingles The Common Lisp Object System An Overview por Richard P Gabriel y Linda DeMichiel proveeo una buena introduccion a la motivacion de definir clases por medio de funciones genericas Kiczales des Rivieres y Bobrow The Art of the Metaobject Protocol 1991 MIT Press ISBN 0 262 61074 4 Keene Sonya Object oriented Programming in Common Lisp A Programmer s Guide to CLOS 1988 Addison Wesley ISBN 0 201 17589 4 CommonLoops merging Lisp and object oriented programming por Daniel G Bobrow Kenneth Kahn Gregor Kiczales Larry Masinter Mark Stefik Frank Zdybel 1986 Portland Oregon Estados Unidos Paginas 17 29 de la Conference on Object Oriented Programming Systems Languages and Applications ISSN 0362 1340 A History and Description of CLOS por Jim Veitch Paginas 107 158 del Handbook of Programming Languages Volume IV Functional and Logic Programming Languages ed Peter H Salus 1998 1st edition Macmillian Technical Publishing ISBN 1 57870 011 6 Datos Q252340Obtenido de https es wikipedia org w index php title Common Lisp Object System amp oldid 117724592, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos