La programmation orientée aspect est (à peu près) ceci, pour AspectJ, qui est l'implémentation Java de la POA :
Tu ajoutes de fonctions au compilateur Java standard pour accepter un nouveau type de structure, les aspects. Un aspect est construit très similairement à une classe.
L'autre point important est, dans le corps de ces aspects, du définis des points dans ton code. Ce peut être l'entrée dans une méthode d'une classe, les sorties de toutes les méthodes publiques d'une classe, la sortie sur exception de toutes les fonctions get*(String) dans un paquet... Bref, c'est très puissant pour définir des points dans ton code.
Ensuite, quand tu as défini ces points, tu définis des "méthodes" dans ton aspect qui vont se déclencher à ces points précis. Note bien que tu peux configurer tes points pour avoir accès au contexte d'appel de la méthode (la valeur d'une String par exemple, et suivant cette valeur, tu fais des choses différentes dans ta méthode d'aspect).
C'est en fait assez puissant, car toutes les fonctions remplies en plusieurs endroits du code peuvent être regroupées en un seul endroit, comme le logging par exemple. Au lieu d'appeler Logger.log(qqch) dans le code de ma méthode de classe, je ne touche pas à mon code, mais je crée un aspect qui va logger la réussite ou l'exception qui a eu lieu dans ma méthode. Et il est aussi facile de virer tous les logs en un seul endroit.
C'est un exemple de l'utilisation des aspects, si vous connaissez un peu Java, le site d'AspectJ est vraiment bon pour la doc (en anglais bien sûr ;-)
[^] # Re: POA
Posté par hugo . En réponse à la dépêche Interview de Bjarne Stroustrup. Évalué à 10.
Tu ajoutes de fonctions au compilateur Java standard pour accepter un nouveau type de structure, les aspects. Un aspect est construit très similairement à une classe.
L'autre point important est, dans le corps de ces aspects, du définis des points dans ton code. Ce peut être l'entrée dans une méthode d'une classe, les sorties de toutes les méthodes publiques d'une classe, la sortie sur exception de toutes les fonctions get*(String) dans un paquet... Bref, c'est très puissant pour définir des points dans ton code.
Ensuite, quand tu as défini ces points, tu définis des "méthodes" dans ton aspect qui vont se déclencher à ces points précis. Note bien que tu peux configurer tes points pour avoir accès au contexte d'appel de la méthode (la valeur d'une String par exemple, et suivant cette valeur, tu fais des choses différentes dans ta méthode d'aspect).
C'est en fait assez puissant, car toutes les fonctions remplies en plusieurs endroits du code peuvent être regroupées en un seul endroit, comme le logging par exemple. Au lieu d'appeler Logger.log(qqch) dans le code de ma méthode de classe, je ne touche pas à mon code, mais je crée un aspect qui va logger la réussite ou l'exception qui a eu lieu dans ma méthode. Et il est aussi facile de virer tous les logs en un seul endroit.
C'est un exemple de l'utilisation des aspects, si vous connaissez un peu Java, le site d'AspectJ est vraiment bon pour la doc (en anglais bien sûr ;-)
A+ Hugo