- Protocole à méta-objets
-
Un protocole à méta-objets est une technique en informatique qui consiste à faire de l'interprète d'un programme un objet de première classe, au même titre que ceux qui composent le programme. Il est ainsi possible de le réécrire afin de changer l'interprétation du programme. Cette technique est répandue notamment dans les interprètes des langages à objets, bien qu'elle ne soit pas spécifique à ce paradigme de programmation. Il faut également bien comprendre que même si cet article parle d'interprète, les protocoles à méta-objets ne sont pas spécifiques aux langages de programmation interprétés ou exécutés par une machine virtuelle.
Pour détailler la notion de protocole à méta-objets, prenons l'exemple d'un appel de méthode. Lorsqu'un programmeur écrit par exemple l'expression
entier.ajouter(3, 7)
, il demande implicitement à l'interprète de l'objetentier
d'interpréter la méthodeajouter
de cet objet avec les paramètres3
et7
. Appelonsentier.interprète
l'objet qui encapsule l'interprète de l'objetentier
. Écrireentier.ajouter(3, 7)
revient à écrire l'appelentier.interprète.appeler("ajouter", (3, 7))
, la transformation (la réification de l'appel) étant réalisée automatiquement. C'est là que réside toute l'idée des protocoles à méta-objets: le programmeur a alors la possibilité d'utiliser n'importe quel objet pour l'attributinterprète
et ainsi définir sa propre sémantique à l'appel de méthode (dans l'exemple). L'objet interprète est habituellement appelé méta-objet, c'est-à-dire objet qui traite des objets.Un méta-objet étant un objet comme les autres, il a lui-même un méta-objet associé qui l'interprète, ayant lui-même un méta-objet, et ainsi de suite. Pour éviter que le processus de réification des appels de méthode ne soit infini, un mécanisme est généralement prévu pour permettre aux objets d'exister sans méta-objet associé. Un interprète auto-suffisant par défaut est alors utilisé pour terminer la récursivité.
Un protocole à méta-objets, c'est une spécification de la manière dont objets et méta-objets interagissent. Il précise en particulier la ou les interfaces que les méta-objets doivent satisfaire, et par là même les instructions de l'interprète qui peuvent être redéfinies. Dans l'exemple des langages à objets, sont inclus la plupart du temps l'instanciation et l'appel de méthode, qui sont les deux instructions majeures (sinon les deux seules) du paradigme de la programmation orientée objet.
Langages de programmation possédant un protocole à méta-objets
- CLOS de Common Lisp
- Smalltalk-80
- la plupart des extensions objets de Scheme (tinyClos, Goop,...)
- ...
Bibliographie
- Gregor Kiczales (1991). The art of the metaobject protocol, ISBN 0-262-61074-4
- Smalltalk, a reflective language Fred Rivard - Proceedings of REFLECTION, 1996
Wikimedia Foundation. 2010.