CLOS


CLOS

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 (add-on) 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 general que éstos. Precisamente la generalidad de CLOS es la característica más difícil 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]

Contenido

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.

Empaquetamiento

Como los sistemas OO en muchos lenguajes dinámicos (como Python), CLOS no provee encapsulamiento. Cualquier miembro de datos (o slot) puede ser accedido utilizando la función slot-value. Los programadores de CL utilizan la herramienta de empaquetamiento para declarar qué funciones o estructuras de datos se quiere exportar.

Métodos :before, :after y :around

Aparte de los métodos normales ("primarios"), también existen métodos :before, :after y :around. Éstos modifican el orden en que los métodos se ejecutan en una clase derivada. Un método :around puede especificar si el método primario es ejecutado por completo. Además el programador puede ajustar si todos los posibles métodos primarios a lo largo de la jerarquía de clases deberían ser llamados o únicamente el que más se parezca.

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.

Prototipos

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.

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. pg 108 of Veitch 1998
  • "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. 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

Véase también

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.

Wikimedia foundation. 2010.

Mira otros diccionarios:

  • clos — clos, close 1. (klô, klô z ) part. passé de clore. 1°   Fermé. Jardin clos de murailles. •   Bien semble être la mer une barre assez forte Pour nous ôter l espoir qu il puisse être battu ; Mais est il rien de clos dont ne trouve la porte Ton heur …   Dictionnaire de la Langue Française d'Émile Littré

  • clos — clos; clos·a·ble; clos·en; clos·ish; clos·te·ri·um; clos·trid·i·al; clos·trid·i·um; cy·clos·to·mate; cy·clos·to·mes; cy·clos·to·mi; cy·clos·to·mous; en·clos·er; fore·clos·able; re·clos·able; clos·et; clos·ing; cy·clos·to·ma; clos·trid·i·an;… …   English syllables

  • cloş — CLOŞ, cloşuri, s.n. Croială largă, în formă de clopot, cu falduri ori evazată, cu firele ţesăturii aşezate oblic. ♢ (Adjectival) Rochie cloş. – Din fr. cloche. Trimis de hai, 03.06.2004. Sursa: DEX 98  cloş s. n., pl. clóşuri Trimis de siveco,… …   Dicționar Român

  • CLOS — (англ. Common Lisp Object System  «объектная система Common Lisp’а»)  система объектно ориентированного программирования, являющаяся частью Common Lisp  стандарта языка Лисп. Кроме того, её встраивают в другие диалекты, такие… …   Википедия

  • Clos — may refer to one of the following. People Corinne Clos (born 1978), an Italian ski mountaineer and long distance runner Dani Clos (born 1988), a Spanish racing driver Dominique Clos (1821 1908), a French botanist Paco Clos (born 1960), a former… …   Wikipedia

  • Clos — bezeichnet: Clos (Weinberg), französisch für einen umfriedeten Weinberg Dani Clos (* 1988), spanischer Rennfahrer Dominique Clos (1821–1908), französischer Botaniker und Direktor des botanischen Gartens in Toulouse Joan Clos (* 1949), spanischer… …   Deutsch Wikipedia

  • clos — CLOS. s. m. Espace de terre cultivé et fermé de murailles, de haies, de fossés, etc. Un clos de vingt arpens. Clos de vigne. Clos d arbres fruitiers. Faire un clos …   Dictionnaire de l'Académie Française 1798

  • Clos Bb — (Сен Сир сюр Мер,Франция) Категория отеля: Адрес: 563 Chemin du Jas De David, 83270 Сен Сир …   Каталог отелей

  • Clos —   [kloː] das, / , in einigen französischen und schweizerischen Weinbaugebieten Bezeichnung für eine Einzellage; ursprünglich ein mit einer Mauer umgebener Weinberg. * * * Clos [klo:, frz.: klo], das; [klo:(s)], [klo:s; frz. clos, eigtl. =… …   Universal-Lexikon

  • Clos — [klo:] das; [klo:(s)], [klo:s] <aus fr. clos »Gehege«, dies zu (m)lat. clausum »Geschlossenes«, substantiviertes Part. Perf. (Neutr.) von lat. claudere »schließen«> von einer Mauer od. Hecke eingefriedeter Weinberg od. garten in Frankreich …   Das große Fremdwörterbuch