initiation à l’aop

Post on 27-Jun-2015

360 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Initiation à l’AOP

Architecture logicielle Université Laval

Automne 2012

© 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

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s NOTIONS PRÉALABLES

Quelques…

4

© 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/

© 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 »?

© 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?

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Solution OO

8

SRP?

Il faut toujours appeler notify()

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Solution AO

9

© 2

01

2 E

lapse

Te

chn

olo

gie

s PRÉOCCUPATIONS TRANSVERSES

Les

10

© 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.

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

Éparpillement

Enchevêtrement

12

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

13

Éparpillement (dispersion)

Sécurité

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Préoccupations transverses

14

Enchevêtrement (cohésion)

Persistance

Fonctionnalité principale

Sécurité

Observation

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (1)

15

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (2)

16

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (3)

17

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (4)

18

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (p

rincip

ale)

19

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Ench

evêtremen

t (récap

itulatif)

20

© 2

01

2 E

lapse

Te

chn

olo

gie

s L’AOP

Introduction à

21

© 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.

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

AOP

24

L’AOP est un paradigme

© 2

01

2 E

lapse

Te

chn

olo

gie

s LA TERMINOLOGIE ET DU

FONCTIONNEMENT

Aperçu rapide de…

25

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Contenu typique d’un aspect

Code à exécuter

Indication des cibles

Aspect

27

© 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();

}

}

© 2

01

2 E

lapse

Te

chn

olo

gie

s

MAUVAISES PRATIQUES Quelques

Image: Ambro/ FreeDigitalPhotos.net 29

© 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

© 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

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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

BONNES PRATIQUES Quelques

Image: photostock / FreeDigitalPhotos.net 33

© 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

© 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)

© 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

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

© 2

01

2 E

lapse

Te

chn

olo

gie

s INTRODUIRE DE L’AOP DANS VOTRE

PROJET

Comment

38

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Choisir sa technologie

Image: Sura Nualpradid / FreeDigitalPhotos.net 39

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Considérer la complexité ajoutée

Gains

Complexité

40

© 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

© 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

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s TECHNOLOGIE

Choisir sa

44

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Quelques cadres pour Java

AspectJ

Spring-AOP

Guice-AOP

45

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Spring supporte deux tisseurs

Spring

Spring AJ

Spring AOP

47

© 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

© 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

© 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

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s MODE DE TISSAGE

Choisir son

52

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Deux grandes approches de tissage

À la compilation (CTW)

À l’exécution (LTW)

53

© 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

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s L’INTÉGRATION

Considérer

56

© 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

© 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

© 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

© 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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

QUESTIONS Période de

61

© 2

01

2 E

lapse

Te

chn

olo

gie

s

ELAPSE TECHNOLOGIES Formation conçue par

© 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

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

© 2

01

2 E

lapse

Te

chn

olo

gie

s

Blogue

Image: renjith krishnan / FreeDigitalPhotos.net

Suivez nos professionnels sur developpementagile.com

top related