Common Lisp Object System
Definición
CLOS es un lenguaje orientado a objetos inmerso en Common lisp con un sistema de objetos dinámico con despacho múltiple y herencia múltiple, ha sido adoptado como un estándar.
Como sistema de objetos dinámico, CLOS permite cambios en tiempo de ejecución y las funciones y clases genéricas. Los métodos pueden ser agregados y removidos, las clasespueden ser agregadas y redefinidas, los objetos pueden ser actualizados para los cambios de la clase y la clase de objetos puede ser cambiada.
CLOS se ha integrado en el ANSI Common Lisp. Las funciones genéricas pueden ser usadas como las funciones normales y son un tipo de datos de primera clase. Cada clase de CLOS está integrada en el sistema de tipos del Common Lisp, muchos tipos del Common Lisptienen una clase correspondiente. Los pathnames o nombres de ruta y los streams o flujos, pueden ser implementados en el CLOS.
Paradigma
El paradigma de CLOS, se puede considerar orientado a objetos, pero no completamente, ya que Lisp es un lenguaje con paradigma hibrido.
Funciones de CLOS
CLOS tiene 3 funciones basicas:
• Definir clases
• Construir objetos que son instancias de clases• Definir métodos y funciones genéricas
Definir Clases
defclass
Una clase se define con la función defclass, las instancias de una clase tienen la misma estructura, comportamiento y son del mismo tipo. Además cada instancia tiene una identidad separada:
Sintaxis:
(DEFCLASS nombre-clase (nombres-superclases)*
(nombre-de-slot/opciones-de-slot)
opciones-clase*)Descripción-slots= (nombre-slot opciones-slot*)
Cada opción es una “Keyword”:
:ACCESSOR nombre-función
:INITFORM expresión
:INITARG symbol
Ejemplo:
(DEFCLASS persona ()
((nombre :accessor nombre-persona :initform 'Juan :initarg :nombre)
(edad :accessor edad-persona :initform 26 :initarg :edad)))
defstruct
Defstruct define automáticamente los atributos con los valores pordefecto, funciones de acceso para leer y modificar el valor del atributo.
Sintaxis:
(DEFSTRUCT nombre-clase*
(nombre-de-slot/opciones-de-slot))
Ejemplo:
(DEFSTRUCT persona
(nombre Juan)
(edad 23))
Defstruct define automáticamente los atributos con los valores por defecto.
make-instance
Crea instancias e inicializa los valores con keywords.
CLOS permite la especificación de valorespor omisión, para los argumentos en la creación de instancias, los cuales no necesariamente deben ser especificados a la hora de invocar al método make-instace.
Sintaxis:
(MAKE-INSTACE
(nombre-de-slot/opciones-de-slot))
Ejemplo:
(make-instance ‘animal
:numpatas 4
:color ‘café
:dieta ‘(croquetas agua))
Hay dos clases distinguidas, una llamada “t” y otra llamada“standard-object”.
La clase llamada “t” no tiene superclases, es una superclase de cada clase excepto de ella misma.
La clase llamada “standard-object” es una instancia de la clase “standard-class” y es una superclase de todas las clases que sean una instancia de “standard-class” excepto de ella misma.
Objetos
Como en cualquier lenguaje orientado a objetos, en CLOS un objeto está caracterizado por un estado yun comportamiento. El estado es un conjunto de valores que distinguen una instancia de una clase de otra y siendo el comportamiento el conjunto de métodos a los cuales el objeto responderá. En CLOS el estado de un objeto está dado por slots los cuales se explica más abajo.
El comportamiento de un objeto es el conjunto de operaciones que el objeto puede ejecutar. Common Lisp expresa todos suscómputos en términos de funciones. Este opera sobre un objeto llamando a una función y pasando el objeto a la función como uno de sus argumentos. Algunas funciones de Common Lisp son genéricas o polimórficas, lo cual significa que pueden trabajar con varios tipos de objetos.
Funciones Genéricas
Una función genérica es aquella cuyo comportamiento depende de las clases o identidades de los...
Regístrate para leer el documento completo.