LOG4430 : Architecture logicielle et conception avancée Yann-Gaël Guéhéneuc Applications de base de la conception orientée aspect : surveillance, traçage et profilage Partie 1/4 Histoire Département de génie informatique et de génie logiciel École Polytechnique de Montréal Guéhéneuc 2009
Applications de base de la conception orientée aspect 1. Contexte 2. Introduction aux aspects 3. Conception par aspects 4. Exemples 5. Avantages et inconvénients 2/19
1. Contexte Pensez à la source de tous les maux en génie logiciel? 3/19
Following slides courtesy of Gregor Kiczales, original available at [http://www.cs.ubc.ca/~gregor/papers/kiczales-java-one-04-aop-panel.ppt] 4/19
objects are intuitive Vous pensez intuitivement a des objets? Points, lignes Surfaces de dessin (Drawing) GUI Widgets Display Point * 2 Shape Line getx() gety() setx(int) sety(int) getp1() getp2() setp1(point) setp2(point) 5/19
objects are not intuitive objects are intuitive En 1969, la plupart des programmeurs auraient utilises la difficile conception et l implantation suivante! 2 4 22 12 65 93 43 86 29 65 + collection of procedures to operate on and manage table entries 6 7 5 8 6/19
OOP not intuitive intuitive La programmation par objets Inventée en 1961 A peu près au même moment que la programmation structurée Devient «par objets» en 1967 Rend le code de simulation plus proche du modèle original 7/19
Aparté 8/19
Aparté Ole-Johan Dahl 12 octobre 1931 29 juin 2002 Norvégien Père de Simula et de la PPO Récipiendaire ACM A.M. Turing Award IEEE John von Neumann Medal Développe l idée de la PPO dans les années 1950 au Centre de calculs norvégien (Norsk Regnesentral) http://heim.ifi.uio.no/~olejohan/ 9/19
Aparté Kristen Nygaard 27 aout 1926 19 aout 2002 Norvégien Père de Simula et de la PPO Récipiendaire ACM A.M. Turing Award IEEE John von Neumann Medal Développe l idée de la PPO dans les années 1950 au Centre de calculs norvégien (Norsk Regnesentral) http://en.wikipedia.org/wiki/kristen_nygaard 10/19
OOP intuitive Qu est-ce la programmation par objets? Une façon de penser Objets, classes, hiérarchies Des mécanismes de soutient de cette pensée Classes, interfaces, encapsulation, polymorphisme Une façon de Rendre le code plus proche de sa conception Améliorer la modularité de la conception et du code Avec de nombreuses implantations Styles, bibliothèques, extension ad-hoc 11/19
OOP MVC Observer Pattern Bonne modularité de la conception mais faible modularité de l implantation class Point extends Shape { private int x = 0, y = 0; int getx() { return x; } int gety() { return y; } Display 1 * Shape } void setx(int x) { this.x = x; display.update(this); } void sety(int y) { this.y = y; display.update(this); } Point getx() gety() setx(int) sety(int) 2 Line getp1() getp2() setp1(point) setp2(point) 12/19
OOP MVC AOP Observer Pattern Pendant ce temps la Début des années 80 (peut-être même plus tôt) D autres travaillaient Structure «entrecoupantes» Mécanismes Réflexion comportementale MOP Programmation orientée sujets Le terme «programmation par aspects» apparaît en 1997 13/19
OOP AOP aspect ObserverPattern { private Display Shape.display; pointcut change(): call(void figures.point.setx(int)) call(void Point.setY(int)) call(void Line.setP1(Point)) call(void Line.setP2(Point)) call(void Shape.); after(shape s) returning: change() && target(s) { s.display.refresh(); } } Display ObserverPattern Point 1 2 * Shape Line getx() gety() setx(int) sety(int) getp1() getp2() setp1(point) setp2(point) 14/19
OOP AOP aspect ObserverPattern { private Display Shape.display; pointcut change(): call(void figures.point.setx(int)) call(void Point.setY(int)) call(void Line.setP1(Point)) call(void Line.setP2(Point)) call(void Shape.); after(shape s) returning: change() && target(s) { s.display.refresh(); } } Display ObserverPattern Point 1 2 * Shape Line getx() gety() setx(int) sety(int) getp1() getp2() setp1(point) setp2(point) 15/19
OOP AOP Maintenant, est-ce que vous pourriez appeler une classe «ObserverPattern»? 16/19
OOP AOP Qu est-ce la programmation par aspects? Une façon de penser Aspects, structures entrecoupantes Des mécanismes de soutient de cette pensée Points de jointure, points de coupe, «advice» Une façon de Rendre le code encore plus proche de sa conception Améliorer la modularité de la conception et du code Avec de nombreuses implantations Styles, bibliothèques, extension ad-hoc 17/19
1. Contexte Autres aspects? Patron de conception Sureté des fils d exécution Swing Application de politiques Authentification, synchronisation Gestion des transactions Débogage Logging 18/19
1. Contexte IBM rapporte Implémentation de politiques 15 a 30% d amélioration de la qualité Gains en productivités significatifs Popularisation de logiciels complexes De nouvelles opportunités d affaires 19/19