M2 INFORMATIQUE
UE HAI931I - Méta-Programmation et Réflexivité
Christophe Dony
Présentation
-
Concepts étudiés : modèles, méta-modèles, réflexivité,
méta-programmation, modèles à l'exécution (models@runtime),
méta-classes, méta-objets, auto-adaptabilité dynamique, construction de systèmes auto-adaptables, construction de
systèmes réflexifs.
- Utilisation de Langages Réflexifs : utilisation de méta-objets pour manipuler les classes, les méthodes,
ou la pile d'exécution, ou pour définir un interpréteur méta-circulaire du langage.
-
Pratique en TP des langages réflexifs les plus élaborés et puissants : Pharo et
CLOS (Common-Lisp Object System)
-
Pratique en Projet : Construction de systèmes réflexifs : Intégration de méta-classes explicites dans un langage à
objets, avec son bootsrap; construction d'un interpréteur réflexif complet.
Notes de Cours
Sujets de TDs/TPs
- SEANCES 1 à 7 - Feuille de TD/TP - Utilisation de systèmes
réflexifs :
- Metaprogrammation en
Pharo/Smalltalk (utilisation de méta-objets pour manipuler les classes, les méthodes,
ou la pile d'exécution, utilisation des méta-classes implicites,
- Metaprogrammation en Clos avec les méta-classes explicites,
- Observation des méta-objets représentant les classes en
Python, ou toute autre étude libre
-
(Optionnel si pas déjà fait en M1 : TD-TP Méta-Programmation avec les
"Aspects", langage AspectJ )
-
SEANCES 7 à 10 :
Réalisation d'un noyau d'un langage à objets réflexif, à métaclasses
explicites (type Objvlisp/Clos), avec son bootstrap, selon le
programme guidé présenté au chapitre 2 du livre A simple
reflective Object Kernel, que vous pouvez récupérer en version pdf
ou consulter en ligne. Version pdf également accessible : ici.
a) lire le chapitre 1 qui est une alternative au cours.
b) Réalisez l'exercice du chapitre 2, qui consiste à compléter
certaines parties d'une implantation complète déjà réalisée.
Pour télécharger l'implantation existante, voir page 24;
Vous pouvez également utiliser l'outil "Monticello Browser",
créer un nouveau "repository" de type "http" et entrer
cette adresse :
"http://smalltalkhub.com/mc/StephaneDucasse/ObjVLispSkeleton/main"
comme argument à "location:", puis faites "open".
Ensuite sélectionnez : "ObjVLispSkeleton-StephaneDucasse.6.mcz"
et faites "load".
- Séances finales : Projets Libres.
- Refaire les exercices donnés en utilisant le noyau
réflexif d'autres langages (par exemple Python ou
Ruby ou Javassist ou AspectJ ou ...)
- Etudier les aspects en SPRING (@AspectJ Based AOP with Spring)
- http://www.tutorialspoint.com/spring/aspectj_based_aop_appoach.htm
-
Etudier les articles qui vous
intéressent parmi cette liste
Corrigés
Pour charger les corrigés :
solution 1 : ouvrir les fichiers avec un éditeur de texte et
faire des copier/coller;
solution 2 : sauvegarder le fichier, puis en Pharo, ouvrir le fichier avec l'outil
FileBrowser puis le charger avec FileIn).
Attention (1) il ne peut y avoir deux classes de même nom dans le
système donc si vous chargez un corrigé, cela peut
entrer en conflit avec votre propre classe.
Attention (2) certaines classes des corrigés sont chargées dans un
package dont le nom commence par ExosPharo; d'autres sont dans
le package TD-HAI931.