TABLE DES MATIÈRES iv
3.3 Traits et typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.1 Notions de typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.2 Les traits comme type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3.3 Ajout du typage aux traits . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.3.4 Typage au sein d’un trait . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.4 Travaux actuels et futurs sur les traits . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.1 Langages supportant les traits . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.2 Recherches actuelles ou futures . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4 Ajout des traits à états à Java 58
4.1 Le langage de programmation Java . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1.1 Classes et objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.1.2 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.1.3 Typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.1.4 Indépendance de plateforme . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2 Émulation des traits à l’aide de la programmation orientée aspect . . . . . . . . . 61
4.2.1 Concepts de la programmation orientée aspect . . . . . . . . . . . . . . . 61
4.2.2 AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.3 Émulation des traits à l’aide d’AspectJ . . . . . . . . . . . . . . . . . . . . 63
4.2.4 Règles de précédence et résolution de conflits . . . . . . . . . . . . . . . . 64
4.2.5 En conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3 Un nouveau langage : tJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.1 Une nouvelle syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.2 Extension de la grammaire de Java . . . . . . . . . . . . . . . . . . . . . . 69
4.4 Implémentation de tJava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.4.1 En modifiant les mécanismes du langage Java . . . . . . . . . . . . . . . . 72
4.4.2 En utilisant la propriété d’aplatissement . . . . . . . . . . . . . . . . . . . 73
5 Les Rewritable Reference Attributed Grammars 80
5.1 Les canonical attributed grammars . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1.2 Problèmes et limitations des canonical attributed grammars . . . . . . . . 82
5.2 Les Reference Attributed Grammars . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2.2 Object-Oriented RAGs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.3 Les Rewritable Reference Attributed Grammars . . . . . . . . . . . . . . . . . . . 88
5.3.1 Un exemple d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.4 Les ReRAGs pour implémenter les traits . . . . . . . . . . . . . . . . . . . . . . . 89
6 Choix des outils 91
6.1 Critères de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.1 Capacité de production de l’AST Java . . . . . . . . . . . . . . . . . . . . 91
6.1.2 Capacité de modification de l’AST Java . . . . . . . . . . . . . . . . . . . 92
6.1.3 Capacité de dériver l’outil . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.2 Outils analysés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.2.1 Eclipse Java Development Tools (JDT) . . . . . . . . . . . . . . . . . . . . 92