Pro Yearly is on sale from $80 to $50! »

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.

F209924610808dc55f985a99c6d380c3?s=128

Félix-Antoine Bourbonnais

September 01, 2012
Tweet

Transcript

  1. © 2012 Elapse Technologies Initiation à l’AOP Architecture logicielle Université

    Laval Automne 2012
  2. © 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
  3. © 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
  4. © 2012 Elapse Technologies NOTIONS PRÉALABLES Quelques… 4

  5. © 2012 Elapse Technologies SRP 5 SOLID Motivational Posters, by

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

    l’impacts des modifications Et si on change « Display »?
  7. © 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?
  8. © 2012 Elapse Technologies Solution OO 8 SRP? Il faut

    toujours appeler notify()
  9. © 2012 Elapse Technologies Solution AO 9

  10. © 2012 Elapse Technologies PRÉOCCUPATIONS TRANSVERSES Les 10

  11. © 2012 Elapse Technologies Préoccupations transverses 11 Certaines préoccupations secondaires

    sont impossibles à regrouper et contaminent plusieurs classes. Angl.: Crosscutting concerns.
  12. © 2012 Elapse Technologies Préoccupations transverses Éparpillement Enchevêtrement 12

  13. © 2012 Elapse Technologies Préoccupations transverses 13 Éparpillement (dispersion) Sécurité

  14. © 2012 Elapse Technologies Préoccupations transverses 14 Enchevêtrement (cohésion) Persistance

    Fonctionnalité principale Sécurité Observation
  15. © 2012 Elapse Technologies Enchevêtrement (1) 15

  16. © 2012 Elapse Technologies Enchevêtrement (2) 16

  17. © 2012 Elapse Technologies Enchevêtrement (3) 17

  18. © 2012 Elapse Technologies Enchevêtrement (4) 18

  19. © 2012 Elapse Technologies Enchevêtrement (principale) 19

  20. © 2012 Elapse Technologies Enchevêtrement (récapitulatif) 20

  21. © 2012 Elapse Technologies L’AOP Introduction à 21

  22. © 2012 Elapse Technologies Orientation objet et préoccupations 22 Théoriquement,

    chaque classe devrait représenter une seule préoccupation.
  23. © 2012 Elapse Technologies Orientation aspect 23 Aspect 1 Classe

    1 Aspect 2 Aspect 3 Classe 2 C C A A A
  24. © 2012 Elapse Technologies AOP 24 L’AOP est un paradigme

  25. © 2012 Elapse Technologies LA TERMINOLOGIE ET DU FONCTIONNEMENT Aperçu

    rapide de… 25
  26. © 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
  27. © 2012 Elapse Technologies Contenu typique d’un aspect Code à

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

    VisitorAspect { /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ protected pointcut startMethod() : execution( ∗ start∗(..) ); /∗ −−−−−−−− Advices −−−−−−−− ∗/ after() : startMethod() { printHello(); } }
  29. © 2012 Elapse Technologies MAUVAISES PRATIQUES Quelques Image: Ambro/ FreeDigitalPhotos.net

    29
  30. © 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
  31. © 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
  32. © 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… »
  33. © 2012 Elapse Technologies BONNES PRATIQUES Quelques Image: photostock /

    FreeDigitalPhotos.net 33
  34. © 2012 Elapse Technologies OO encore d’actualité 34 Ce qui

    était vrai en OO l’est encore en AO
  35. © 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)
  36. © 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
  37. © 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() …
  38. © 2012 Elapse Technologies INTRODUIRE DE L’AOP DANS VOTRE PROJET

    Comment 38
  39. © 2012 Elapse Technologies Choisir sa technologie Image: Sura Nualpradid

    / FreeDigitalPhotos.net 39
  40. © 2012 Elapse Technologies Considérer la complexité ajoutée Gains Complexité

    40
  41. © 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
  42. © 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
  43. © 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
  44. © 2012 Elapse Technologies TECHNOLOGIE Choisir sa 44

  45. © 2012 Elapse Technologies Quelques cadres pour Java AspectJ Spring-AOP

    Guice-AOP … 45
  46. © 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
  47. © 2012 Elapse Technologies Spring supporte deux tisseurs Spring Spring

    AJ Spring AOP 47
  48. © 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
  49. © 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
  50. © 2012 Elapse Technologies Syntaxe ou tisseur? Tissage Spring-AOP (proxy)

    AspectJ Spring-AJ Syntaxe (langage) XML @AspectJ Langage AJ (.aj) 50
  51. © 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
  52. © 2012 Elapse Technologies MODE DE TISSAGE Choisir son 52

  53. © 2012 Elapse Technologies Deux grandes approches de tissage À

    la compilation (CTW) À l’exécution (LTW) 53
  54. © 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
  55. © 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
  56. © 2012 Elapse Technologies L’INTÉGRATION Considérer 56

  57. © 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
  58. © 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
  59. © 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
  60. © 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
  61. © 2012 Elapse Technologies QUESTIONS Période de 61

  62. © 2012 Elapse Technologies ELAPSE TECHNOLOGIES Formation conçue par

  63. © 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
  64. © 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, …)
  65. © 2012 Elapse Technologies Blogue Image: renjith krishnan / FreeDigitalPhotos.net

    Suivez nos professionnels sur developpementagile.com