Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Initiation à l'AOP

Initiation à l'AOP

Présentée par Félix-Antoine Bourbonnais aux étudiants d'informatique et de génie logiciel de l'Université Laval dans le cadre d'un cours d'architecture logicielle.

Félix-Antoine Bourbonnais

September 01, 2012
Tweet

More Decks by Félix-Antoine Bourbonnais

Other Decks in Programming

Transcript

  1. © 2012 Elapse Technologies Félix-Antoine Bourbonnais Ing. jr, PSM-I Formateur

    & Coach Agile o Tests automatisés: TDD/ATDD, BDD, … o Orientation objet avancée o Architecture agile o Réusinage et qualité (Clean Code) o Agile Scrum Concepteur de logiciels o Pratiques de développement o Java, Python, etc. 2 @fbourbonnais linkedin.com/in/fbourbonnais elapsetech.com/fab
  2. © 2012 Elapse Technologies Réchauffement… Qui fait ou a fait

    de l’AOP dans un projet? Qui a eu une mauvaise expérience avec l’AOP? Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net 3
  3. © 2012 Elapse Technologies SRP 5 SOLID Motivational Posters, by

    Derick Bailey http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/
  4. © 2012 Elapse Technologies Gestion des dépendances 6 Objectif: minimiser

    l’impacts des modifications Et si on change « Display »?
  5. © 2012 Elapse Technologies Problèmes OO 7 Est-ce que beaucoup

    de classes risquent d’utiliser Display? Toutes les fonctionnalités sont utilisées par les figures? Est-ce que Display risque de changer? Dans quel sens devrait être la dépendance? Abstraction?
  6. © 2012 Elapse Technologies Préoccupations transverses 11 Certaines préoccupations secondaires

    sont impossibles à regrouper et contaminent plusieurs classes. Angl.: Crosscutting concerns.
  7. © 2012 Elapse Technologies Orientation objet et préoccupations 22 Théoriquement,

    chaque classe devrait représenter une seule préoccupation.
  8. © 2012 Elapse Technologies Un aspect Un module encapsulant une

    préoccupation Peu gérer les préoccupations transverses Généralement une classe « évoluée » o Capacités supplémentaires afin de permettre l’encapsulation de préoccupations transverses 26
  9. © 2012 Elapse Technologies Contenu typique d’un aspect Code à

    exécuter Indication des cibles Aspect 27
  10. © 2012 Elapse Technologies Aspect en AspectJ 28 public aspect

    VisitorAspect { /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ protected pointcut startMethod() : execution( ∗ start∗(..) ); /∗ −−−−−−−− Advices −−−−−−−− ∗/ after() : startMethod() { printHello(); } }
  11. © 2012 Elapse Technologies Trop, c’est comme pas assez… Quand

    50% du code est composé d’aspects… Est-ce 50% du code est composé de préoccupations transverses? Image: farconville / FreeDigitalPhotos.net 30
  12. © 2012 Elapse Technologies L’AOP n’est pas un pansement Suis-je

    en train d’utiliser l’AOP pour corriger un problème de design? Ne vous servez pas de l’AOP comme parfum afin de masquer les mauvaises odeurs… Image: digitalart / FreeDigitalPhotos.net 31
  13. © 2012 Elapse Technologies Le « trip techno » 32

    L’AOP c’est trop COOL !! La chute pourrait être douloureuse! • « AspectJ... WOW trop cool ! » • « On peut bidouiller plein de trucs avec ça ! » • « Tsé le truc qu’on arrivait pas à faire... on va faire un aspect qui va changer ça puis qui va décider si… »
  14. © 2012 Elapse Technologies Utiliser l’aspect comme « lien »

    Déléguer à une classe qui contient la logique liée à cette préoccupation Utiliser l’aspect pour tisser la logique Note: Peut varier en fonction du tisseur (ex.: AspectJ) 35 pointcut inXorY() : execution(* *(..)) && within(X || Y); after() : inXorY { persistance.clearCache(); } X (classe cible) Y (classe cible) Aspect Persistance (classe à tisser)
  15. © 2012 Elapse Technologies Dépendances et couplage N’oubliez pas que

    l’aspect est couplé à toutes les classes où il s’injecte*. * Où un point de coupure apparie Image: Salvatore Vuono / FreeDigitalPhotos.net 36
  16. © 2012 Elapse Technologies Précision du point de coupure Un

    PC précis est plus à risque d’être impacté par un changement Un PC très générique risque d’apparier trop de PJ On appelle cela le « Fragile Pointcut Problem » [1] [1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. In European Interactive Workshop on Aspects in Software (EIWAS), 2004. 37 pointcut pcPrecis() : execution(void C.doX()); pointcut pcGenerique() : execution(* C.doX*(..)); pointcut pcPourEtreCertainAvoirProbleme : execution(* *(..)); - Si C.doX() est renommé pour C.doXInContext() … - Si on ajoute C.doXPasRapportAvecAspect() …
  17. © 2012 Elapse Technologies Considérer l’intégration Avec d’autres cadres applicatifs

    (framework) Le système de déploiement L’intégrateur continu Les technologie de tests Etc. Image: manostphoto / FreeDigitalPhotos.net 41
  18. © 2012 Elapse Technologies S’assurer de maîtriser les concepts Image:

    renjith krishnan / FreeDigitalPhotos.net 42 Rappelez-vous que vous introduisez un nouveau paradigme et non pas simplement une technologie « cool »! Prototyper Essayer sur un petit projet Bien se documenter Bien former son équipe
  19. © 2012 Elapse Technologies Se discipliner Résistez au « canon

    pour tuer une mouche » L’AO tourne généralement mal entre les mains de cowboys Balancez toujours la complexité versus le gain Tester! Image: photostock / FreeDigitalPhotos.net 43
  20. © 2012 Elapse Technologies AspectJ Le plus complet o Plusieurs

    primitives o Plusieurs PJ possibles Extension à Java o Requiert un compilateur d’Aspects o Ou de remplacer le chargement des classes (CL ou Java Agent) 46
  21. © 2012 Elapse Technologies Sprint-AOP Java 100% pur o Ne

    requiert pas de compilateur spécial o Ne requiert pas de Java Agent o Utilise des « Proxies » dynamiques Limitations o Tissage possible uniquement dans des Beans Spring o Peu de primitives et limitées (ex.: exécution de méthodes) o Ne peut intercepter des appels à « this » 48
  22. © 2012 Elapse Technologies Spring-Aj Spring peut se servir d’aspects

    de Spring pour élargir ses fonctionnalités Spring se sert d’AspectJ pour lui-même @Configurable permet d’injecter des dépendances dans des objets qui ne sont pas des Beans 49 Souvent une mauvaise odeur concernant le design… Spring FW++ AspectJ Spring AJ
  23. © 2012 Elapse Technologies Syntaxe ou tisseur? Tissage Spring-AOP (proxy)

    AspectJ Spring-AJ Syntaxe (langage) XML @AspectJ Langage AJ (.aj) 50
  24. © 2012 Elapse Technologies Google Guice Limitations similaires à Spring-AOP

    (par « proxies ») Syntaxe propre o Java o Pas de syntaxe cachée dans les chaînes de caractères des annotations (comme @AspectJ) 51
  25. © 2012 Elapse Technologies Deux grandes approches de tissage À

    la compilation (CTW) À l’exécution (LTW) 53
  26. © 2012 Elapse Technologies CTW (Compile-Time Weaving) Tissage à la

    compilation Remplace généralement le compilateur de Java Peut tisser uniquement dans le code compilé (pas dans une lib. externe) Produit du Bytecode standard tissé 54
  27. © 2012 Elapse Technologies LTW (Load-Time Weaving) Tissage lors du

    chargement de la classe Remplace (assiste) le chargeur de classes de Java (ClassLoader) Requiert généralement le démarrage de la JVM avec un JavaAgent Peut être problématique avec des JEE Container ou entrer en conflit avec d’autres instrumentations 55
  28. © 2012 Elapse Technologies AJDT Plugin Eclipse pour AspectJ Désagrément

    subtile: o Force le CTW sur le projet dans Eclipse quand la nature « AspectJ » est activée Offre de l’assistance o Complétion (limitée) o Réusinage (limité) o Coloration syntaxique et validateur 57
  29. © 2012 Elapse Technologies Maven Plugin pour AspectJ Si combiné

    avec AJDT o Compile avec AJC versus JDT-AJ pour Eclipse o Toujours faire « mvn clean » pour éviter les problèmes Pour du LTW utilisez le Exec Maven Plugin (ou autre) et passez le JavaAgent 58
  30. © 2012 Elapse Technologies Spring + AJ Utiliser le Java

    Agent de Spring plutôt que celui par défaut d’AspectJ Attention à la combinaison Spring-AOP (proxy) et AJDT 59
  31. © 2012 Elapse Technologies Autres considérations Maven o Il est

    possible que les métriques soient comptées en double en CTW. o Ex.: couverture des tests JEE Container et Spring o Des chargeurs de classes spécifiques sont disponibles pour plusieurs JEE Container. o Sinon, il faut se rabattre sur u Java Agent de la JVM 60
  32. © 2012 Elapse Technologies Nos services Formations o Formations publiques

    o Formations privées sur mesure en entreprise Accompagnement d’entreprises o Mentorat et coaching o Diagnostique Service-conseil o Agent de changement o Expertise et conseils de pointe
  33. © 2012 Elapse Technologies Notre expertise Processus Agile o Scrum,

    Kanban, … o eXtreme Programming Pratiques de développement o Tests automatisés (TDD, ATDD, BDD, ...) o Architecture Agile o Réusinage (refactoring) o Qualité (code propre, intégration continue, …)
  34. © 2012 Elapse Technologies Blogue Image: renjith krishnan / FreeDigitalPhotos.net

    Suivez nos professionnels sur developpementagile.com