Blog de Laurent Bloch
Blog de Laurent Bloch

ISSN 2271-3980
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets informatiques et mes enseignements.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Programmer des objets avec Bigloo
Une extension à Scheme
Article mis en ligne le 4 août 2005
dernière modification le 9 mai 2006

par Laurent Bloch

Afin de s’adonner à la programmation par objets, les langages de la famille Lisp, dont Scheme, se sont dotés d’extensions adaptées, qui se conforment plus ou moins toutes au modèle CLOS (Common Lisp Object System). Cet article en donne un exemple avec le système d’objets de Bigloo, la version de Scheme que j’utilise pour mes cours.

Connaissez-vous le livre de Matthias Felleisen et Daniel P. Friedman intitulé A Little Java, A Few Patterns ? C’est sans doute une des meilleures introductions possibles au monde de la programmation par objets, au langage Java et aux Design Patterns (patrons de conception ? patrons de méthode ?), c’est à la fois facile, profond et amusant. Si jusqu’à ce jour vous avez été allergique à Java, achetez ce livre et vous verrez une approche tout à fait originale de l’enseignement de la programmation, qu’une lectrice n’a pas hésité à qualifier de socratique : un programmeur chevronné exhibe des textes de programmes, un novice pose des questions et essaie de mettre les réponses en pratique.
Aucune règle n’est formulée, aucune définition n’est stipulée, elles sont seulement inférées des commentaires sur le programme en construction.

La trame du livre de Felleisen et Friedman tourne autour d’histoires de brochettes et de pizzas : on part d’objets très simples, la pâte d’une pizza ou la pique d’une brochette, auxquels viennent s’ajouter des anchois, du fromage, des oignons, des tomates, des morceaux de viande, etc. La combinaison de ces objets permet de décrire une pizza napolitaine ou une brochette végétarienne. Il faut ensuite écrire les prédicats qui permettent de vérifier qu’une brochette est bien végétarienne, ou qu’une pizza ne comporte pas trop d’anchois. Simple, amusant et instructif, ai-je déjà dit. J’avais envie de transposer ces exercices en Scheme pour mes enseignements.

Le modèle objet de Java est assez différent de celui de Bigloo, qui est nettement inspiré de CLOS, et plus précisément de l’interprétation qu’en a donnée Christian Queinnec sous le nom de Meroon [1]. Manuel Serrano (l’auteur de Bigloo) m’a autorisé à publier ici un article sur les objets de Bigloo (il y a aussi une version PostScript) qui constitue une introduction pédagogique à ce système.

Pour Java, les méthodes (c’est-à-dire les programmes qui exécutent les actions demandées aux objets) sont associées aux classes. CLOS, suivi en cela par Meroon et Bigloo, définit les méthodes au moyen de fonctions génériques, ce qui donne un aspect assez différent aux programmes, en fait avec Meroon ou Bigloo la syntaxe d’un programme à objets est assez peu différente de celle d’un programme « classique ».

Une conversation avec Manuel m’a permis de préciser les correspondances entre les expressions de Java pour les objets et celles de Bigloo.

Là où Java déclare une classe abstraite et une méthode abstraite (le rôle de la méthode RemA est de retirer de la pizza les anchois qui pourraient s’y trouver) :

Bigloo définit une classe abstraite et une fonction générique :

Là où Java dit new :

Bigloo dit instantiate :

Chaque classe qui étend la classe abstraite PizzaD possède un attribut p, lui-même de type PizzaD, qui désigne la pizza sous-jacente en cours de fabrication à laquelle elle vient s’ajouter. Seule la classe Crust (pâte) ne contient pas de champ p, évidemment (à moins que l’on envisage des pizzas à double ou triple épaisseur de pâte).

Bref, achetez le livre, vous tirerez tout le sel (surtout avec les anchois) de cet exercice qui n’est enfantin qu’en apparence. Le distributeur pour la France ne semble plus guère s’y intéresser, mais Amazon.co.uk propose de nombreux exemplaires d’occasion à moins de cinq livres sterling.


Dans la même rubrique