initiation à l’aop

65
© 2012 Elapse Technologies Initiation à l’AOP Architecture logicielle Université Laval Automne 2012

Upload: elapse-technologies

Post on 27-Jun-2015

357 views

Category:

Technology


1 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Initiation à l’AOP

Architecture logicielle Université Laval

Automne 2012

Page 2: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 3: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 4: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s NOTIONS PRÉALABLES

Quelques…

4

Page 5: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

SRP

5 SOLID Motivational Posters, by Derick Bailey http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/

Page 6: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Gestion des dépendances

6

Objectif: minimiser l’impacts des modifications

Et si on change « Display »?

Page 7: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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?

Page 8: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Solution OO

8

SRP?

Il faut toujours appeler notify()

Page 9: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Solution AO

9

Page 10: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s PRÉOCCUPATIONS TRANSVERSES

Les

10

Page 11: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

11

Certaines préoccupations secondaires sont impossibles à regrouper et contaminent

plusieurs classes.

Angl.: Crosscutting concerns.

Page 12: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

Éparpillement

Enchevêtrement

12

Page 13: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

13

Éparpillement (dispersion)

Sécurité

Page 14: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

14

Enchevêtrement (cohésion)

Persistance

Fonctionnalité principale

Sécurité

Observation

Page 15: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (1)

15

Page 16: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (2)

16

Page 17: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (3)

17

Page 18: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (4)

18

Page 19: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (p

rincip

ale)

19

Page 20: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (récap

itulatif)

20

Page 21: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s L’AOP

Introduction à

21

Page 22: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Orientation objet et préoccupations

22

Théoriquement, chaque classe devrait représenter une seule préoccupation.

Page 23: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Orientation aspect

23

Aspect 1 Classe 1

Aspect 2

Aspect 3

Classe 2

C

C

A

A

A

Page 24: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

AOP

24

L’AOP est un paradigme

Page 25: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s LA TERMINOLOGIE ET DU

FONCTIONNEMENT

Aperçu rapide de…

25

Page 26: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 27: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Contenu typique d’un aspect

Code à exécuter

Indication des cibles

Aspect

27

Page 28: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Aspect en AspectJ

28

public aspect VisitorAspect {

/∗ −−−−−−−− Pointcuts −−−−−−−− ∗/

protected pointcut startMethod() :

execution( ∗ start∗(..) );

/∗ −−−−−−−− Advices −−−−−−−− ∗/

after() : startMethod() {

printHello();

}

}

Page 29: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

MAUVAISES PRATIQUES Quelques

Image: Ambro/ FreeDigitalPhotos.net 29

Page 30: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 31: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 32: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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… »

Page 33: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

BONNES PRATIQUES Quelques

Image: photostock / FreeDigitalPhotos.net 33

Page 34: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

OO encore d’actualité

34

Ce qui était vrai en OO l’est encore en AO

Page 35: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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)

Asp

ect

Persistance (classe à tisser)

Page 36: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 37: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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() …

Page 38: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s INTRODUIRE DE L’AOP DANS VOTRE

PROJET

Comment

38

Page 39: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Choisir sa technologie

Image: Sura Nualpradid / FreeDigitalPhotos.net 39

Page 40: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Considérer la complexité ajoutée

Gains

Complexité

40

Page 41: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 42: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 43: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 44: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s TECHNOLOGIE

Choisir sa

44

Page 45: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Quelques cadres pour Java

AspectJ

Spring-AOP

Guice-AOP

45

Page 46: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 47: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Spring supporte deux tisseurs

Spring

Spring AJ

Spring AOP

47

Page 48: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 49: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 50: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Syntaxe ou tisseur?

Tissage

Spring-AOP (proxy)

AspectJ

Spring-AJ

Syntaxe (langage)

XML

@AspectJ

Langage AJ (.aj)

50

Page 51: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 52: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s MODE DE TISSAGE

Choisir son

52

Page 53: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Deux grandes approches de tissage

À la compilation (CTW)

À l’exécution (LTW)

53

Page 54: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 55: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 56: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s L’INTÉGRATION

Considérer

56

Page 57: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 58: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 59: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 60: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 61: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

QUESTIONS Période de

61

Page 62: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

ELAPSE TECHNOLOGIES Formation conçue par

Page 63: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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

Page 64: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

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, …)

Page 65: Initiation à l’AOP

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Blogue

Image: renjith krishnan / FreeDigitalPhotos.net

Suivez nos professionnels sur developpementagile.com