Métaobjet
Un métaobjet est la réification des entités d'un objet, comme son interface, sa classe, ses méthodes, etc.
Description
En informatique, un méta-objet est un objet qui manipule, crée, décrit ou met en œuvre des objets (y compris lui-même). L'objet auquel le méta-objet se rapporte est appelé objet de base. Parmi les informations qu'un méta-objet peut définir figurent le type, l'interface, la classe, les méthodes, les attributs, l'arbre d'analyse, etc. de l'objet de base. Les métaobjets sont des exemples du concept informatique de réflexion, dans lequel un système a accès (généralement au moment de l'exécution) à sa propre structure interne. La réflexion permet à un système de se réécrire à la volée, de modifier sa propre mise en œuvre au fur et à mesure de son exécution[1].
Protocole de métaobjet
Un protocole de métaobjet (MOP) fournit le vocabulaire (protocole) pour accéder et manipuler la structure et le comportement des systèmes d'objets. Les fonctions typiques d'un protocole de méta-objet sont les suivantes[2] :
- Créer ou supprimer une nouvelle classe
- Créer une nouvelle propriété ou méthode
- Faire en sorte qu'une classe hérite d'une autre classe ("changer la structure de la classe")
- Générer ou modifier le code définissant les méthodes d'une classe.
Un protocole pour les métaobjets n'obéit pas à l'aspect fermé du principe ouvert/fermé, selon lequel les systèmes logiciels doivent être ouverts à l'extension, mais fermés à la modification. Au contraire, un protocole de métaobjet expose de manière transparente la composition interne des objets et la structure complète de tous les objets contenus dans un système[3].
Applications
Dans un langage de programmation, un protocole pour les métaobjets fournit des facilités qui peuvent être utilisées pour mettre en œuvre la programmation orientée aspect.
Notes et références
- (en) Brian C Smith, « Procedural Reflection In Programming Languages », MIT Technical Report, no MIT-LCS-TR-272,‎ (lire en ligne).
- (en) Brian Foote et Ralph Johnson, « Reflective Facilities in Smalltalk-80 », Oopsla '89,‎ 1–6 octobre 1989, p. 327–335 (ISBN 0897913337, DOI 10.1145/74877.74911, lire en ligne).
- (en) Sullivan Gregory T., « Aspect-oriented programming using reflection and metaobject protocols », sur Communications of the ACM, (DOI 10.1145/383845.383865, consulté le ), p. 95–97.