POA
Un exemple simple : le loggeur
Afin de vous donner une meilleur idée des capacitées de la programmation orientée aspect, j'ai créé un loggeur en aspect avec le framework AspectJ. Cet exemple ne représente qu'une partie infime de la puissance de la programmation orientée aspect, mais il montre que nous pouvons appliquer très rapidement un loggeur puissant dans une application, et cela sa modifier son code
Les contraintes de ce loggeur sont :
- L'affichage de tous les appels de méthodes pour des objets Point.
- L'affichage de la classe et du numéro de ligne dans laquelle la méthode de Point à été appelée.
- L'affichage des éventuels arguments.
La classe point
La classe point est un object simple disposant de getter et setter permettant de définir les coordonnées d'un point dans un plan.

Le Main
Le main a pour but de créer un objet point, de l'afficher sans faire appel à sa méthode toString(), puis de le déplacer et de l'afficher en appelant explicitement sa méthode toString().

Le loggeur
Le loggeur est notre aspect dont sa fonctionnalité est l'affichage des traces. Son objectif est d'afficher tout les appels de méthodes des objects points, avec les contraintes précédement enumérées.

La première partie de l'aspect est le point de coupure, nommer logger. Les wilcards mis en place veulent dire :
- N'importe quelle visibilitée (public, private ou protected)
- Uniquement la classe Point
- N'importe quel nom de méthode
- Avec ou sans arguments
Ensuite, nous définissons le code advice, avec le mot clef around. Cela veut dire que nous souhaitons tisser l'aspect avant et après les appels de méthodes de la classe Point. L'exucution normal de la méthode sera faite grâce au mot clef proceed(), dont la valeur de retour est la valeur de retour de la méthode capturée.
Le loggeur affichage les évènements sur la sortie standard d'erreur afin de différencier se qu'il affiche du main.
Résultat après lancement
Le résultat est je pense assez impressionnant pour un loggeur codé si rapidement et avec peu de lignes de code. La petite particularitée se trouve au niveau des affichage effectuée dans le main. Effectivement, l'appel à la méthode toString() de la classe Point n'a été détecter que lors d'un appel explicite dans le main.
