4. EVOLUTION des PARADIGMES de
PROGRAMMATION
Langage machine → programmation structurelle → procedural → modulaire → orienté-objets → ...
5. PROGRAMMATION ORIENTE OBJET
Issu de l'évolution de plus en plus
complexe des besoins et d'une volonté de
représenter le monde.
Introduit de nouvelles approches pour
concevoir du code plus lisible et plus
réutilisable (erradication des "gotos" au profit
des boucles, introduction des types et des
structurations modulaires autour des classes)
6. POINTS FORTS POO
● Méthode de conception
● Rigueur
● Définitions des besoins métier
● Niveau abstraction plus élevé
● Industrialisation des composants
7. POINTS FAIBLES POO
● Difficulté à modéliser les
fonctionnalités globales (« crosscutting
concerns »).
● Peut conduire à l'émergence de
classes et/ou modules moins
indépendants moins réutilisables.
● Ne peut permet pas d'éliminer
certains "Concerns"
9. PROGRAMMATION ORIENTE ASPECT
Quelques généralités
● Concue par G.Kiczales et son équipe au
Xerox Parc en1996
● Définie comme la technologie du
futur par le MIT Champ de Recherche
ACctif
10. SOLUTION : AOP
ELIMINER LES SPAGHETTIS !!!!
Nouvelle philosophie de programmation
● Complémentaire à la POO
● Permet de séparer la description des
aspects métiers et techniques
● Décrit et détermine le code des aspects
dans un nouveau type d’entité logicielle
● Fusionne le code des aspects
techniques et le code métier selon les
points transversaux.
11. AVANTAGES AOP
● Maintenance aisée : indépendance
utilisation
● Meilleure réutilisation : indépendance
environnement, métier, domaine
d'application
● Gain de productivité : parallélisation des
développements
● Meilleure qualité du code par une
simplification donc meilleure lecture
22. Les Mots-Clés....
Cross-cutting concerns
Préoccupations transversales
Mix au sein d'un même programme de
sous-programmes distincts couvrant
des aspects techniques séparés.
23. Les Mots-Clés....
WEAVING
Tissage
Insertion statique ou dynamique dans le
système logiciel de l'appel aux greffons.
24. Les Mots-Clés....
JOIN POINT
Point de Jonction
Localisation spécifique dans le flot
d'exécution du système, où il est
possible d'insérer un greffon : avant,
autour, à la place, après.
25. AOP...En BREF
En résumé, l'AOP consiste à :
● Identifier les cross cutting concerns
● Ecrire les greffons-advices qui représentent
l'aspect et qui permettent d'encapsuler les
préoccupations transersales
● Choisir où appliquer ses greffons : pointcuts
29. Les Mots-Clés....
TISSEURS d'ASPECT
JAVA
AspectJ : Extension du langage Java nécessitant donc une étape de
précompilation. Le résultat est toutefois du bytecode Java standard.
JAC (Java Aspect Components) : Framework 100 % Java.
Spring : Spring AOP
PYTHON
Aspyct : Moteur de programmation orientée aspect et autre
Aspects.py : Bibliothèque léger et de bas niveau pour intercepter les appels
de fonction.
PHP
AOP-PHP Extension pecl téléchageable https://github.com/AOP-
PHP/AOP
JMSAopBundle Bundle symfony accessible http://jmsyst.
com/bundles/JMSAopBundle
30. AOP sans Symphony
AOP - PHP
● N'est pas supporté nativement
● Des solutions existent
Créée par Julien Salleyron, Gérald Croës
Installation simple
- git clone https://github/AOP-PHP/AOP
- cd AOP
- phpize
- ./configure
- make
- make test
- make install
32. CONCLUSION PHP-AOP
Avantages PHP-AOP
Simple à mettre en place, projet
prometteur et très bonne
documentation.
Quelques liens:
http://www.croes.org/gerald/projects/aop/documentation_aop_extension_php.pdf
http://aop-php.github.com/
34. JMSAopBundle
● Installation standard
● Utilisation est simple
■ Créer un intercepteur
■ Créer un point de coupure
35. INTERCEPTEUR
● Créer une classe
MethodInterceptorInterface
● Injecter via le constructeur les services
transversaux necessaire comme le Logger,
SecurityContext, EntityManager …
● Créer la méthode intercept(MethodInvocation
$invocation) et
● Intégrer le greffon
● Appeler la méthode invocation->proceed()
36. POINT DE COUPURE
● Création d'une classe qui implémente
la classe PointcutInterface
● Création les méthodes function
matchesClass(ReflectionClass $class)
et matchesMethod(ReflectionMethod
$method)