My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
CLOS  
Premier pas vers CLOS
Updated Nov 20, 2008 by arnaud.a...@gmail.com

Introduction

Le common Lisp est le premier langage à intégrer la programmation orientée objet. La syntaxe et les commandes ne changent pas par rapport a la programmation fonctionnelle classique.
C’est un langage orienté objet à classe et non aux prototypes. Sa plus grande particularité est l’héritage multiple entre les classes. Il permet également de créer des méta-classes : les classes de classes.

Déclaration des classes

La déclaration des classes et de la méthode est très proche de java tout en utilisant le langage fonctionnel. Voici comment on déclare une classe :

(defclass personne ()

((name : initarg : name: reader nom-name))
(: documentation “c’est la création de la classe nom”))

defclass est une macro pour définir la classe

personne est le nom de la classe

() entre les parenthèse il faut placer la liste des superclasses directes, dans l’exemple la liste est vide.

((name : initarg : name: reader nom-Name)) C’est la liste des champs (“slots”) et de leurs options. Dans cet exemple nous avons un seul champ avec ces deux options :

: instar : Name Cela permet d’initialiser la valeur des champs à l’instanciation. Pour l’initialiser il faut donner l’argument au champ : Name avec maker-instance.
: reader personne-Name cette option permet d’accéder à la valeur de champ en utilisant l’appel personne-name. Le système de compilation gêner alors une méthode pour l’appel du nom de la personne.

(: documentation “c’est la création de la classe nom”)) La documentation est une option de classe également. Pour obtenir la documentation il faut faire l’appel à la fonction documentation.

Déclaration d'héritage

Voici comment définir un héritage ou « enfant » est la sous-classe de « personne »

(defclass enfant (personne)

()) ( : documentation ”l’enfant est une personne’’ )

Ainsi la sous-classe hérite de toutes les options de la superclasse, à savoir ici l’option ‘’Name’’.

Définition d'instance

Voici comment définir une instance :

(defun make-enfant (name)

(make-instance ‘enfant : name name))

Il est important de remarquer que chacune des classes a sa propre méthode make-‘class’ pour créer l’instance.

Déclaration d'une méthode

Pour définir la méthode il faut utiliser

(defmethod ((t enfant)) t) Cette méthode return t.

Powered by Google Project Hosting