La Programmation Orientée Aspect : un paradigme de programmation prometteur ?
“ La Programmation Orientée Aspect ? Ne voulais-tu pas plutôt me parler de la Programmation Orientée Objet ? ”
Il est vrai que l’on entend très peu parler du modèle de programmation Aspect, plus particulièrement appelé AOP pour Aspect Oriented Programming. Cependant, il ne s’agit pas d’une simple erreur de vocabulaire … j’évoque bel et bien ce paradigme de programmation, qui est par ailleurs, l’un des modèles de programmation les plus prometteurs pour les années à venir.
“ Commençons par un petit saut dans l’histoire … ”
La Programmation Orientée Aspect (POA), est un nouveau paradigme de programmation créée par Gregor Kickzales en 1996 pour le laboratoire de recherche informatique Xerox, situé en Californie.
Il a fallu seulement 3 ans d’attente, pour que ce modèle de programmation soit breveté et certifié comme un paradigme de programmation en 1999. A cette époque, une nouvelle manière de programmer, de structurer et de modéliser les applications s’est introduite.
Pour rappel, la programmation orientée objet a été élaborée par les Norvégiens Ole-Johan Dahl et Krister Nygaard au début des années 60. C’est ainsi que, 30 ans plus tard, avec l’apparition des langages objets (C++ puis Java), ce paradigme de programmation connut un succès fulgurant.
“ Mais au final, en quoi consiste la POA ? ”
Les développeurs sont de plus en plus habitués à la programmation orientée objets (POO) pour façonner leurs applications. Cependant, depuis quelques années, grâce à l’implosion du numérique dans notre quotidien, ce paradigme tend à montrer certaines limites.
Les applications étant de plus en plus nombreuses, celles-ci nécessitent une réorganisation de leur développement. L’ajout de nouvelle fonctionnalité dans une application pour répondre aux besoins des utilisateurs, entraine un code « lourd » qui n’est pas modulé dans certaines situations.
Effectivement, plus la quantité de code est importante au sein d’un programme et plus il convient de séparer les modules. Ceux-ci ne faisaient pas les mêmes tâches, ou étaient indépendants entre eux. L’objectif de la POA est donc de faciliter la compréhension du code et éviter les futures erreurs de programmation que l’on pourrait commettre en codant par la suite. Par exemple, si je veux développer une application de chat instantané avec un système d’accès au chat par mot de passe (« logging »), on pourrait avoir deux modules : l’un gérant les utilisateurs se connectant au tchat et l’autre permettant à un utilisateur d’envoyer un message.
En POA, ces modules sont considérés comme des aspects gérant une particularité technique de l’application. Ces aspects présentent l’avantage d’être réutilisables pour d’autres applications, permettant ainsi, d’éviter les répétitions dans le code. La programmation orientée aspect permet donc de traiter séparément :
· Le code technique de l’application qu’on appelle « les préoccupations transversales » (exemple : enregistrement sur une application) → Les Aspects
· Le code métier, gérant le cœur d’une application
La programmation orientée aspect est généralement utilisée par les développeurs pour :
· Effectuer une tâche de logging : création d’un aspect spécifique permettant d’enregistrer un client sur son application.
· Gérer des exceptions : Au sein d’un programme, de nombreuses exceptions peuvent être implantées de manière répétitive. Ces traitements peuvent donc être considérés comme des aspects. Aussi, le code devient plus modulable et la gestion de ces exceptions peut être réutilisée pour une autre fonctionnalité.
“ Tout cela est bien beau, mais quels sont les avantages de ce paradigme par rapport à la POO ? ”
La POA n’est pas un langage de programmation, mais elle est une extension de langage, et c’est ce qui en fait son grand atout. Ce paradigme de programmation peut être appliqué sur des langages objets tel que Java, C++ ou bien C# mais également sur des langages procéduraux tel que le C.
L’objectif de la POA n’est pas de remplacer les paradigmes de programmation tel que la POO, mais de les améliorer afin de résoudre les problématiques liées à ces paradigmes.
De plus, utiliser l’AOP comme paradigme de programmation dans son application présente de nombreux avantages :
· Gain de Productivité : L’équipe de développement du code métier ne se préoccupe que du cœur de l’application, tandis qu’une seconde équipe se préoccupe des fonctionnalités techniques de l’application (logging…).
· Amélioration de la lisibilité du code : La simplification du code par aspect permet d’améliorer la qualité du code et ainsi, le rendre de meilleure qualité pour les autres développeurs.
“ Sur ce, comment la Programmation Orientée Aspect est-elle mise en œuvre ? ”
La mise en œuvre de la programmation orientée aspect, est complexe et nécessite l’utilisation d’un vocabulaire approprié. Tout d’abord, il faut savoir que le cœur de l’application, c’est-à-dire le code métier, ne doit pas avoir connaissance des aspects. Cela peut paraître « alambiqué », mais c’est en fait le tisseur d’aspect (module à installer avec le compilateur) qui fera le lien, lors de la compilation entre les préoccupations transversales (aspects) et le code métier (qui peut être composé de classes si l’on programme en orienté objet).
L’AOP peut être mis en œuvre par n’importe quel langage utilisant un tisseur d’aspect. Il existe deux types de tisseur :
· Statique : Le tissage à lieu avant l’exécution du programme. Il s’agit d’une méthode très performante. Cependant, le tissage statique impose aux développeurs de recompiler son programme à chaque modification des aspects.
· Dynamique : Les aspects sont mis à jour automatiquement. Il n’y a pas besoin de recompiler le programme quand le développeur modifie les aspects. Ceux-ci peuvent donc être modifiés pendant l’exécution du programme, ce qui est très utile lorsque que l’on programme un serveur par exemple.
AspectJ (tisseur statique) se présente comme une extension directe de Java, disponible sur l’interface de développement Eclipse. Il s’agit de l’extension POA la plus utilisée. Si vous souhaitez développer en Java avec un tisseur dynamique, il est nécessaire de télécharger l’extension SpringAOP. Bien entendu, d’autres extensions existent pour d’autres langages tel que le C ou le C++.
“ Tu me parles d’aspects… Comment cela fonctionne-t-il techniquement ? ”
Pour que le compilateur effectue un tissage afin de faire le lien entre le code technique et le code métier, il est nécessaire, pour les développeurs, d’ajouter dans leurs programmes de nouveaux concepts spécifiques à la POA. Ces fonctionnalités, dépendantes du type de tisseur utilisé, ont la particularité d’être assez complexes à programmer. Il en reste néanmoins que ce sont des outils très puissants. Pour AspectJ, par exemple, il faut définir trois termes fondamentaux :
· Le greffon : Il s’agit de l’aspect qui s’exécutera à un point défini au sein du code métier, qui sera invoqué par un point de jonction.
· Les points de jonctions/Point d’exécution : également appelés JoinPoints, il s’agit de l’endroit dans la portion du code métier où il est autorisé d’utiliser les aspects. Ils peuvent être utilisés pour des exceptions, des appels de fonctions, ou bien pour appeler des constructeurs.
· Les points de coupure/Point d’actions : Également appelés PointCuts. Ils définissent un ensemble de points de jonctions.
“ La Programmation Orientée Aspect : quel avenir ? ”
Le 21ème siècle connaît une évolution du numérique fulgurante. Les applications sont de plus en plus chargées en termes de code, et répondent à de plus en plus de besoins dans notre quotidien. Cela impose donc une réorganisation du code. A titre d’exemple, lors de sa création, l’application Facebook permettait d’envoyer des messages instantanément d’un point A à un point B. Aujourd’hui, nous pouvons suivre l’actualité, regarder, diffuser des vidéos en direct, interagir….
Il est donc nécessaire pour ces applications de réorganiser leurs codes, pour le rendre modulable. La Programmation Orientée Aspect répond donc à des objectifs : définir des fonctionnalités transverses sous forme d’aspect et les tisser au code Java ou C++ déjà existant pour fournir l’application … sans pour autant remplacer les autres paradigmes de programmation.
De plus, les aspects peuvent être réutilisables pour d’autres applications, ce qui fait de la POA un paradigme de programmation prometteur.
Cependant, comme tout paradigme de programmation, la POA présente des limites. Son implémentation n’est pas standardisée : chaque implémentation fournit sa propre syntaxe pour mettre en œuvre les différents objectifs de ce paradigme de programmation. A titre d’exemple les tisseurs Spring AOP et AspectJ, fonctionnant tous deux avec JAVA, ont une implémentation de l’AOP radicalement différente.
Ainsi, il va nous falloir attendre quelques années pour que ce paradigme de programmation puisse s’adapter à toutes nos applications…
Références :
[1] : Le guide officiel d’AspectJ
[2] : Mohamed Youssfi : Cours sur la Programmation Orientée Aspect
[3] : Introduction à la programmation orientée Aspect
[4] : Programmation orientée Aspect en Java avec AspectJ
[5] : Ikrame Meskine : Programmation orientée aspects pour Java