Initiation à l’AOPArchitecture logicielle                          © 2012 Elapse Technologies   Université Laval      Auto...
Félix-Antoine BourbonnaisIng. jr, PSM-I    Formateur & Coach Agile     o Tests automatisés: TDD/ATDD, BDD, …     o Orienta...
Réchauffement…                                                Qui fait ou a fait de                                       ...
© 2012 Elapse TechnologiesQuelques…NOTIONS PRÉALABLES                     4
SRP                                                                                                           © 2012 Elaps...
Gestion des dépendancesObjectif: minimiser l’impacts des modifications                    Et si on change                 ...
Problèmes OO               Est-ce que beaucoup de classes               risquent d’utiliser Display?               Toutes ...
Solution OO                                            © 2012 Elapse Technologies              SRP?                       ...
© 2012 Elapse Technologies                                           9Solution AO
© 2012 Elapse TechnologiesLesPRÉOCCUPATIONS TRANSVERSES                     10
Préoccupations transversesAngl.: Crosscutting concerns.                                                 © 2012 Elapse Tech...
Préoccupations transverses                                                © 2012 Elapse Technologies                      ...
Préoccupations transversesÉparpillement (dispersion)                  Sécurité                                  © 2012 Ela...
Préoccupations transversesEnchevêtrement (cohésion)                            Fonctionnalité                             ...
© 2012 Elapse TechnologiesEnchevêtrement (1)                                       15
© 2012 Elapse TechnologiesEnchevêtrement (2)                                       16
© 2012 Elapse TechnologiesEnchevêtrement (3)                                       17
© 2012 Elapse TechnologiesEnchevêtrement (4)                                       18
© 2012 Elapse TechnologiesEnchevêtrement(principale)                                      19
© 2012 Elapse TechnologiesEnchevêtrement(récapitulatif)                                       20
© 2012 Elapse Technologies                                         21                Introduction à                       ...
Orientation objet et préoccupations                                           © 2012 Elapse Technologies    Théoriquement,...
Orientation aspect                     C                              A                         Classe 1        Aspect 1  ...
AOP                                    © 2012 Elapse Technologies      L’AOP est un paradigme                             ...
© 2012 Elapse TechnologiesAperçu rapide de…LA TERMINOLOGIE ET DUFONCTIONNEMENT                        25
Un aspect Un module encapsulant une préoccupation Peu gérer les préoccupations transverses                                ...
Contenu typique d’un aspect                                         © 2012 Elapse Technologies  Code à      Indication    ...
Aspect en AspectJpublic aspect VisitorAspect {    /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/    protected pointcut startMethod() : ...
© 2012 Elapse Technologies    Quelques    MAUVAISES PRATIQUESImage: Ambro/ FreeDigitalPhotos.net     29
Trop, c’est comme pas assez…     Quand 50% du code est     composé d’aspects…                                             ...
L’AOP n’est pas un pansement     Suis-je en train d’utiliser     l’AOP pour corriger un     problème de design?           ...
Le « trip techno »                L’AOP c’est trop COOL !!     La chute pourrait être douloureuse!                        ...
© 2012 Elapse Technologies    Quelques    BONNES PRATIQUESImage: photostock / FreeDigitalPhotos.net     33
OO encore d’actualité                                               © 2012 Elapse Technologies  Ce qui était vrai en OO l’...
Utiliser l’aspect comme « lien »     Déléguer à une classe qui contient la logique liée à cette     préoccupation     Util...
Dépendances et couplage                                                 N’oubliez pas que                                 ...
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ér...
© 2012 Elapse TechnologiesCommentINTRODUIRE DE L’AOP DANS VOTREPROJET                      38
Choisir sa technologie                                                      © 2012 Elapse TechnologiesImage: Sura Nualprad...
Considérer la complexité ajoutée                     Gains                                   © 2012 Elapse Technologies   ...
Considérer l’intégration     Avec d’autres cadres     applicatifs (framework)     Le système de                           ...
S’assurer de maîtriser les conceptsRappelez-vous que vous introduisez un nouveau    paradigme et non pas simplement une   ...
Se discipliner     Résistez au « canon pour tuer une mouche »     L’AO tourne généralement mal entre     les mains de cowb...
© 2012 Elapse Technologies                                           44                             TECHNOLOGIE           ...
Quelques cadres pour Java AspectJ Spring-AOP                             © 2012 Elapse Technologies Guice-AOP …           ...
AspectJ Le plus complet o Plusieurs primitives o Plusieurs PJ possibles                                                © 2...
Spring supporte deux tisseurs            Spring             AOP                                   © 2012 Elapse Technologi...
Sprint-AOP Java 100% pur o Ne requiert pas de compilateur spécial o Ne requiert pas de Java Agent                         ...
Spring-Aj Spring peut se servir d’aspects de Spring pour élargir ses fonctionnalités Spring se sert d’AspectJ pour lui-mêm...
Syntaxe ou tisseur?             Tissage    Syntaxe (langage)   Spring-AOP (proxy)   XML                                   ...
Google Guice Limitations similaires à Spring-AOP (par « proxies ») Syntaxe propre o Java                                  ...
© 2012 Elapse TechnologiesChoisir sonMODE DE TISSAGE                  52
Deux grandes approches de tissage       À la compilation (CTW)                                    © 2012 Elapse Technologi...
CTW (Compile-Time Weaving) Tissage à la compilation Remplace généralement le compilateur de Java                          ...
LTW (Load-Time Weaving) Tissage lors du chargement de la classe Remplace (assiste) le chargeur de classes de Java (ClassLo...
© 2012 Elapse Technologies                                             56                             L’INTÉGRATION       ...
AJDT Plugin Eclipse pour AspectJ Désagrément subtile: o Force le CTW sur le projet dans Eclipse quand la nature           ...
Maven Plugin pour AspectJ Si combiné avec AJDT o Compile avec AJC versus JDT-AJ pour Eclipse                              ...
Spring + AJ Utiliser le Java Agent de Spring plutôt que celui par défaut d’AspectJ Attention à la combinaison Spring-AOP (...
Autres considérations Maven o Il est possible que les métriques soient comptées en   double en CTW.                       ...
61© 2012 Elapse Technologies                                    QUESTIONS                       Période de
© 2012 Elapse TechnologiesFormation conçue parELAPSE TECHNOLOGIES
Nos services Formations o Formations publiques o Formations privées sur mesure en entreprise                              ...
Notre expertise Processus Agile o Scrum, Kanban, … o eXtreme Programming                                                  ...
Blogue                          Suivez nos professionnels sur                            developpementagile.com           ...
Prochain SlideShare
Chargement dans…5
×

Initiation à l’AOP

451 vues

Publié le

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.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
451
Sur SlideShare
0
Issues des intégrations
0
Intégrations
135
Actions
Partages
0
Téléchargements
13
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Initiation à l’AOP

  1. 1. Initiation à l’AOPArchitecture logicielle © 2012 Elapse Technologies Université Laval Automne 2012
  2. 2. Félix-Antoine BourbonnaisIng. jr, PSM-I Formateur & Coach Agile o Tests automatisés: TDD/ATDD, BDD, … o Orientation objet avancée © 2012 Elapse Technologies o Architecture agile o Réusinage et qualité (Clean Code) elapsetech.com/fab o Agile Scrum @fbourbonnais Concepteur de logiciels linkedin.com/in/fbourbonnais o Pratiques de développement o Java, Python, etc. 2
  3. 3. Réchauffement… Qui fait ou a fait de l’AOP dans un projet? © 2012 Elapse Technologies Qui a eu une mauvaise expérience avec l’AOP?Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net 3
  4. 4. © 2012 Elapse TechnologiesQuelques…NOTIONS PRÉALABLES 4
  5. 5. SRP © 2012 Elapse TechnologiesSOLID Motivational Posters, by Derick Baileyhttp://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/ 5
  6. 6. Gestion des dépendancesObjectif: minimiser l’impacts des modifications Et si on change « Display »? © 2012 Elapse Technologies 6
  7. 7. Problèmes OO Est-ce que beaucoup de classes risquent d’utiliser Display? Toutes les fonctionnalités sont © 2012 Elapse Technologies utilisées par les figures? Est-ce que Display risque de changer? Dans quel sens devrait être la dépendance? Abstraction? 7
  8. 8. Solution OO © 2012 Elapse Technologies SRP? Il faut toujours appeler notify() 8
  9. 9. © 2012 Elapse Technologies 9Solution AO
  10. 10. © 2012 Elapse TechnologiesLesPRÉOCCUPATIONS TRANSVERSES 10
  11. 11. Préoccupations transversesAngl.: Crosscutting concerns. © 2012 Elapse Technologies Certaines préoccupations secondaires sont impossibles à regrouper et contaminent plusieurs classes. 11
  12. 12. Préoccupations transverses © 2012 Elapse Technologies Enchevêtrement Éparpillement 12
  13. 13. Préoccupations transversesÉparpillement (dispersion) Sécurité © 2012 Elapse Technologies 13
  14. 14. Préoccupations transversesEnchevêtrement (cohésion) Fonctionnalité principale © 2012 Elapse Technologies Persistance Sécurité Observation 14
  15. 15. © 2012 Elapse TechnologiesEnchevêtrement (1) 15
  16. 16. © 2012 Elapse TechnologiesEnchevêtrement (2) 16
  17. 17. © 2012 Elapse TechnologiesEnchevêtrement (3) 17
  18. 18. © 2012 Elapse TechnologiesEnchevêtrement (4) 18
  19. 19. © 2012 Elapse TechnologiesEnchevêtrement(principale) 19
  20. 20. © 2012 Elapse TechnologiesEnchevêtrement(récapitulatif) 20
  21. 21. © 2012 Elapse Technologies 21 Introduction à L’AOP
  22. 22. Orientation objet et préoccupations © 2012 Elapse Technologies Théoriquement, chaque classe devrait représenter une seule préoccupation. 22
  23. 23. Orientation aspect C A Classe 1 Aspect 1 © 2012 Elapse Technologies A C Aspect 2 Classe 2 A Aspect 3 23
  24. 24. AOP © 2012 Elapse Technologies L’AOP est un paradigme 24
  25. 25. © 2012 Elapse TechnologiesAperçu rapide de…LA TERMINOLOGIE ET DUFONCTIONNEMENT 25
  26. 26. Un aspect Un module encapsulant une préoccupation Peu gérer les préoccupations transverses © 2012 Elapse Technologies Généralement une classe « évoluée » o Capacités supplémentaires afin de permettre l’encapsulation de préoccupations transverses 26
  27. 27. Contenu typique d’un aspect © 2012 Elapse Technologies Code à Indication Aspect exécuter des cibles 27
  28. 28. Aspect en AspectJpublic aspect VisitorAspect { /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ protected pointcut startMethod() : © 2012 Elapse Technologies execution( ∗ start∗(..) ); /∗ −−−−−−−− Advices −−−−−−−− ∗/ after() : startMethod() { printHello(); }} 28
  29. 29. © 2012 Elapse Technologies Quelques MAUVAISES PRATIQUESImage: Ambro/ FreeDigitalPhotos.net 29
  30. 30. Trop, c’est comme pas assez… Quand 50% du code est composé d’aspects… © 2012 Elapse Technologies Est-ce 50% du code est composé de préoccupations transverses?Image: farconville / FreeDigitalPhotos.net 30
  31. 31. L’AOP n’est pas un pansement Suis-je en train d’utiliser l’AOP pour corriger un problème de design? © 2012 Elapse Technologies Ne vous servez pas de l’AOP comme parfum afin de masquer les mauvaises odeurs…Image: digitalart / FreeDigitalPhotos.net 31
  32. 32. Le « trip techno » L’AOP c’est trop COOL !! La chute pourrait être douloureuse! © 2012 Elapse Technologies • « 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… » 32
  33. 33. © 2012 Elapse Technologies Quelques BONNES PRATIQUESImage: photostock / FreeDigitalPhotos.net 33
  34. 34. OO encore d’actualité © 2012 Elapse Technologies Ce qui était vrai en OO l’est encore en AO 34
  35. 35. 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 © 2012 Elapse Technologies Note: Peut varier en fonction du tisseur (ex.: AspectJ)pointcut inXorY() : execution(* *(..)) X (classe cible) Aspect && within(X || Y); Persistance (classe à tisser)after() : inXorY { Y (classe cible) persistance.clearCache();} 35
  36. 36. Dépendances et couplage N’oubliez pas que l’aspect est couplé à toutes les classes où il © 2012 Elapse Technologies s’injecte*. * Où un point de coupure apparieImage: Salvatore Vuono / FreeDigitalPhotos.net 36
  37. 37. 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 © 2012 Elapse Technologies On appelle cela le « Fragile Pointcut Problem » [1]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() …[1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. 37In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
  38. 38. © 2012 Elapse TechnologiesCommentINTRODUIRE DE L’AOP DANS VOTREPROJET 38
  39. 39. Choisir sa technologie © 2012 Elapse TechnologiesImage: Sura Nualpradid / FreeDigitalPhotos.net 39
  40. 40. Considérer la complexité ajoutée Gains © 2012 Elapse Technologies Complexité 40
  41. 41. Considérer l’intégration Avec d’autres cadres applicatifs (framework) Le système de © 2012 Elapse Technologies déploiement L’intégrateur continu Les technologie de tests Etc.Image: manostphoto / FreeDigitalPhotos.net 41
  42. 42. S’assurer de maîtriser les conceptsRappelez-vous que vous introduisez un nouveau paradigme et non pas simplement une technologie « cool »! © 2012 Elapse Technologies Prototyper Essayer sur un petit projet Bien se documenter Bien former son équipeImage: renjith krishnan / FreeDigitalPhotos.net 42
  43. 43. Se discipliner Résistez au « canon pour tuer une mouche » L’AO tourne généralement mal entre les mains de cowboys © 2012 Elapse Technologies Balancez toujours la complexité versus le gain Tester!Image: photostock / FreeDigitalPhotos.net 43
  44. 44. © 2012 Elapse Technologies 44 TECHNOLOGIE Choisir sa
  45. 45. Quelques cadres pour Java AspectJ Spring-AOP © 2012 Elapse Technologies Guice-AOP … 45
  46. 46. AspectJ Le plus complet o Plusieurs primitives o Plusieurs PJ possibles © 2012 Elapse Technologies Extension à Java o Requiert un compilateur d’Aspects o Ou de remplacer le chargement des classes (CL ou Java Agent) 46
  47. 47. Spring supporte deux tisseurs Spring AOP © 2012 Elapse Technologies Spring AJ Spring 47
  48. 48. Sprint-AOP Java 100% pur o Ne requiert pas de compilateur spécial o Ne requiert pas de Java Agent © 2012 Elapse Technologies 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. 49. Spring-Aj Spring peut se servir d’aspects de Spring pour élargir ses fonctionnalités Spring se sert d’AspectJ pour lui-même © 2012 Elapse Technologies @Configurable permet d’injecter des dépendances dans des objets qui ne sont pas des Beans Souvent une mauvaiseSpring Spring odeur concernant le AspectJ AJ FW++ design… 49
  50. 50. Syntaxe ou tisseur? Tissage Syntaxe (langage) Spring-AOP (proxy) XML © 2012 Elapse Technologies AspectJ @AspectJ Spring-AJ Langage AJ (.aj) 50
  51. 51. Google Guice Limitations similaires à Spring-AOP (par « proxies ») Syntaxe propre o Java © 2012 Elapse Technologies o Pas de syntaxe cachée dans les chaînes de caractères des annotations (comme @AspectJ) 51
  52. 52. © 2012 Elapse TechnologiesChoisir sonMODE DE TISSAGE 52
  53. 53. Deux grandes approches de tissage À la compilation (CTW) © 2012 Elapse Technologies À l’exécution (LTW) 53
  54. 54. CTW (Compile-Time Weaving) Tissage à la compilation Remplace généralement le compilateur de Java © 2012 Elapse Technologies Peut tisser uniquement dans le code compilé (pas dans une lib. externe) Produit du Bytecode standard tissé 54
  55. 55. LTW (Load-Time Weaving) Tissage lors du chargement de la classe Remplace (assiste) le chargeur de classes de Java (ClassLoader) © 2012 Elapse Technologies 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. 56. © 2012 Elapse Technologies 56 L’INTÉGRATION Considérer
  57. 57. AJDT Plugin Eclipse pour AspectJ Désagrément subtile: o Force le CTW sur le projet dans Eclipse quand la nature © 2012 Elapse Technologies « AspectJ » est activée Offre de l’assistance o Complétion (limitée) o Réusinage (limité) o Coloration syntaxique et validateur 57
  58. 58. Maven Plugin pour AspectJ Si combiné avec AJDT o Compile avec AJC versus JDT-AJ pour Eclipse © 2012 Elapse Technologies 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. 59. Spring + AJ Utiliser le Java Agent de Spring plutôt que celui par défaut d’AspectJ Attention à la combinaison Spring-AOP (proxy) et © 2012 Elapse Technologies AJDT 59
  60. 60. Autres considérations Maven o Il est possible que les métriques soient comptées en double en CTW. © 2012 Elapse Technologies 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. 61. 61© 2012 Elapse Technologies QUESTIONS Période de
  62. 62. © 2012 Elapse TechnologiesFormation conçue parELAPSE TECHNOLOGIES
  63. 63. Nos services Formations o Formations publiques o Formations privées sur mesure en entreprise © 2012 Elapse Technologies Accompagnement d’entreprises o Mentorat et coaching o Diagnostique Service-conseil o Agent de changement o Expertise et conseils de pointe
  64. 64. Notre expertise Processus Agile o Scrum, Kanban, … o eXtreme Programming © 2012 Elapse Technologies 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. 65. Blogue Suivez nos professionnels sur developpementagile.com © 2012 Elapse TechnologiesImage: renjith krishnan / FreeDigitalPhotos.net

×