Programmation orientée aspect
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

La programmation orientée aspect (POA, en anglais aspect-oriented programming - AOP) est un paradigme de programmation qui permet de séparer les considérations techniques (aspect en anglais) des descriptions métier dans une application. Par exemple, le principe de l'inversion de contrôle (L'inversion de contrôle (Inversion of Control, IOC) est un patron d'architecture commun à tous les frameworks (ou cadre de développement et...) (en anglais, IOC, Inversion Of Control) peut être implémentée par cette méthode de programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel,...).

La programmation orientée aspect (La programmation orientée aspect (POA, en anglais aspect-oriented programming - AOP) est un paradigme de programmation qui permet de séparer les considérations techniques (aspect en anglais) des descriptions métier dans une application. Par...) est une technologie (Le mot technologie possède deux acceptions de fait :) transversale et n'est pas liée à un langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain d'écrire un code source qui sera analysé par une machine, généralement un ordinateur. Le code source subit...) particulier mais peut être mise en œuvre aussi bien avec un langage orienté objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être désigné par une étiquette...) comme Python qu'avec un langage impératif comme le C, le seul prérequis étant l'existence d'un tisseur d'aspect pour le langage cible (cf. § Tisseurs d'aspects)

Historique

Les concepts de la programmation orientée aspect ont été formulés par Gregor Kiczales et son équipe, qui travaillait alors pour le Xerox (Xerox est une entreprise américaine, basée à Stamford (Connecticut).) PARC (Un Parc est un terrain naturel enclos,[1] formé de bois ou de prairies, dans lequel ont été tracées des allées et chemins destinés à la chasse, à...).

Limites technologiques

Les techniques actuelles de conception logicielles et de programmation amènent à découper un logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements effectués automatiquement par un appareil informatique. Y sont inclus les instructions de traitement, regroupées sous forme de...) en modules logiciels a priori indépendants les uns des autres car gérant des aspects différents du système conçu. Certains de ces modules implémentent soit des tâches métier, soit des tâches plus applicatives comme l'authentification (L'authentification est la procédure qui consiste, pour un système informatique, à vérifier l'identité d'une entité (personne,...) des utilisateurs ou encore offrant des services techniques comme la génération de trace (TRACE est un télescope spatial de la NASA conçu pour étudier la connexion entre le champ magnétique à petite échelle du Soleil et la géométrie du...) ou le multi-threading. Ces modules représentent alors au même niveau d'abstraction ( En philosophie, l'abstraction désigne à la fois une opération qui consiste a isoler par la pensée une ou plusieurs qualités d'un objet concret pour en former une représentation intellectuelle, et le...), différentes considérations (différents aspects) d'une application, le plus souvent celui de la couche métier.

Exemples de modules :

  • gestion des utilisateurs (authentification),
  • archivage (L'archivage est l'action de mettre en archive, d'archiver. Employé surtout à l'origine pour les seuls documents électroniques, comme un synonyme de stockage ou de sauvegarde, il tend de plus en plus à être utilisé pour tous les...) des données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) (persistance),
  • programmation concurrentielle (multi-threading),
  • information pendant l'exécution du logiciel (trace),
  • logique (La logique (du grec logikê, dérivé de logos (λόγος), terme inventé par Xénocrate signifiant à la fois raison, langage, et raisonnement) est dans une...) métier (par exemple informatique de gestion (L'informatique de gestion est le domaine de l'informatique se concentrant sur la programmation de logiciels tournés vers la gestion : comptabilité, finances, ressources humaines, gestion des stocks, logistique, gestion de la production,...), système d'information géographique, commerce électronique (Le commerce électronique (e-commerce, en anglais) désigne l'échange de biens et de services entre deux entités sur les réseaux informatiques, notamment Internet. Il représente un marché de 10 milliards d’euros de Chiffre...), ...)
  • etc.

Dans la pratique, les considérations techniques que sont censées implémenter les modules non seulement s'entrecroisent (par exemple la gestion des utilisateurs fait aussi appel à la génération de trace) mais aussi sont répartis dans la couche métier: c'est l'intrication ou entrecroisement des aspects techniques (crosscutting en anglais). Ainsi, une couche logicielle, initialement dédiée à gérer la logique métier applicative (par exemple un système bancaire), va se retrouver dépendante de modules gérant les aspects transactionnels, journalisation (La journalisation (en anglais logging) est l'action de relever dans un journal (en anglais log) tous les évènements qui se produisent dans un système informatique pendant son fonctionnement.), etc., conduisant à une complexification du code, de son développement et de sa maintenance.

La programmation par aspect va permettre d'extraire les dépendances entre modules concernant des aspects techniques entrecroisés et de les gérer depuis l'extérieur de ces modules en les spécifiant dans des composants du système à développer nommés aspects ; ils sont développés à un autre niveau d'abstraction.

Principe

Ainsi, au lieu d'avoir un appel direct à un module technique depuis un module métier, ou entre deux modules techniques différents, en programmation par aspect, le code du module en cours de développement est concentré sur le but poursuivi (la logique bancaire, pour reprendre notre exemple) , tandis qu'un aspect est spécifié de façon autonome, implémentant un aspect technique particulier, par exemple la persistance ( Persistance (statistiques) Persistance (informatique) en peinture : La Persistance de la mémoire (1931) en médecine : la persistance du...) ou encore la génération de trace. Un ensemble (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une multitude qui peut être comprise comme un tout »,...) de points d'insertions ou joinpoint en anglais sont ensuite définis pour établir la liaison entre l'aspect et le code métier ou un autre aspect. Ces définitions de joinpoint sont définis dans le cadre de la POA. Selon les frameworks ou les langages d'aspects, la fusion (En physique et en métallurgie, la fusion est le passage d'un corps de l'état solide vers l'état liquide. Pour un corps pur, c’est-à-dire pour une substance...) du code technique avec le code métier est alors soit réalisée à la compilation, soit à l'exécution.

Bien sûr, si chaque aspect créé devait lui-même définir explicitement à quel point (Graphie) d'exécution il doit s'insérer dans le code métier ou dans un autre aspect, c’est-à-dire par exemple avec une dépendance directe vers le module métier où devra s'intercaler le code technique, on n'aurait alors fait que décaler le problème. Aussi, l'astuce particulière de la programmation par aspect consiste à utiliser un système d'expressions rationnelles pour préciser à quels points d'exécution (en anglais, joinpoint) du système l'aspect spécifié devra être activé.

Exemple/Étude de cas :

Un logiciel métier qui décrit un environnement (L'environnement est tout ce qui nous entoure. C'est l'ensemble des éléments naturels et artificiels au sein duquel se déroule la vie humaine. Avec les enjeux écologiques actuels, le terme environnement tend actuellement à prendre une...) distribué est écrit de manière classique en utilisant une décomposition (En biologie, la décomposition est le processus par lequel des corps organisés, qu'ils soient d'origine animale ou végétale dès l'instant qu'ils sont...) fonctionnelle (En mathématiques, le terme fonctionnelle se réfère à certaines fonctions. Initialement, le terme désignait les fonctions qui en prennent d'autres en argument. Aujourd'hui,...) ou objet. Au moment du déploiement du système, on s’aperçoit que les machines physiques sur lesquelles le système va tourner ont en fait des caractéristiques hétérogènes (puissance, bande passante (La bande passante (angl. bandwidth) est un intervalle de fréquences pour lesquelles la réponse d'un appareil est supérieure à un minimum. Elle est généralement confondue avec la largeur de bande passante qui...), etc.) qui impactent ou modifient les fonctionnalités du logiciel d’origine.

Une approche fréquente consisterait en ce cas à " patcher " le code un peu partout pour adapter le logiciel à son environnent d’exécution réel. Avec les outils d’AOP on peut facilement spécifier les changements requis SANS toucher (Le toucher, aussi appelé tact ou taction, est l'un des cinq sens de l'homme ou de l'animal, essentiel pour la survie et le développement des êtres vivants,...) au source du code original, dont la logique reste intacte.

Les outils de programmation par aspect sont en fait similaires aux modificateurs (before, after et around) que l’on trouve dans des langages comme LISP, auxquels on a ajouté la possibilité d’une description d’insertions déclaratives.

Un aspect permet donc de spécifier :

  • les points d'action (pointcut), qui définissent les points de jonction satisfaisants aux conditions d'activation (Activation peut faire référence à :) de l'aspect, donc le ou les moments où l'interaction (Une interaction est un échange d'information, d'affects ou d'énergie entre deux agents au sein d'un système. C'est une action réciproque qui suppose l'entrée en contact de sujets.) va avoir lieu,
  • les greffons c’est-à-dire les programmes (advice) qui seront activés avant, autour (Autour est le nom que la nomenclature aviaire en langue française (mise à jour) donne à 31 espèces d'oiseaux qui, soit appartiennent au genre Accipiter, soit constituent les 5 genres Erythrotriorchis, Kaupifalco,...) de ou après les points d'action définis.

Avantages

Le couplage entre les modules gérant des aspect techniques peut être réduit de façon très importante, en utilisant ce principe, ce qui présente de nombreux avantages :

  • Maintenance aisée : les modules techniques, sous forme d'aspect, peuvent être maintenus plus facilement du fait de son détachement de son utilisation,
  • Meilleure réutilisation : tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) module peut être réutilisé sans se préoccuper de son environnement et indépendamment du métier ou du domaine d'application. Chaque module implémentant une fonctionnalité technique précise, on n'a pas besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est souvent fait un classement des besoins humains en trois grandes catégories : les besoins primaires, les besoins secondaires et les besoins...) de se préoccuper des évolutions futures : de nouvelles fonctionnalités pourront être implémentées dans de nouveaux modules qui interagiront avec le système au travers des aspects.
  • Gain de productivité : le programmeur (En informatique, un développeur (ou programmeur) est un informaticien qui réalise du logiciel en créant des algorithmes et en les mettant en...) ne se préoccupe que de l'aspect de l'application qui le concerne, ce qui simplifie son travail, et permet d'augmenter la parallélisation du développement.
  • Amélioration de la qualité du code : la simplification du code qu'entraine la programmation par aspect permet de le rendre plus lisible et donc de meilleure qualité.

Inconvénients

Le tissage d'aspect qui n'est finalement que de la génération automatique (L'automatique fait partie des sciences de l'ingénieur. Cette discipline traite de la modélisation, de l'analyse, de la commande et, de la régulation des systèmes dynamiques. Elle a pour fondements théoriques les...) de code inséré à certains points d'exécution du système développé, produit un code qui peut être difficile à analyser (parce que généré automatiquement) lors des phases de mise au point des logiciels (déboguage, test). Mais en fait cette difficulté est du même ordre que celle apportée par toute décomposition non linéaire (fonctionnelle ou objet par exemple).

Cela dit, une implémentation (Le mot implantation peut avoir plusieurs significations :) comme AJDT, basée sur AspectJ, offre des outils sophistiqués qui permettent de passer (Le genre Passer a été créé par le zoologiste français Mathurin Jacques Brisson (1723-1806) en 1760.) de façon transparente, en mode déboguage, du code d'une classe à celui d'un aspect.

Lexique

La programmation orientée aspect, parce qu'elle propose un paradigme de programmation et de nouveaux concepts, a développé un jargon bien spécifique qui ne facilite pas la compréhension de ses concepts qui sont, en définitive, simples mais puissants.

  • aspect : un module définissant des greffons et leurs points d'activation,
  • greffon (en anglais, advice) : un programme qui sera activé à un certain point d'exécution du système, précisé par un point de jonction,
  • tissage ou tramage (en anglais, weaving) : insertion statique (Le mot statique peut désigner ou qualifier ce qui est relatif à l'absence de mouvement. Il peut être employé comme :) ou dynamique (Le mot dynamique est souvent employé désigner ou qualifier ce qui est relatif au mouvement. Il peut être employé comme :) dans le système logiciel de l'appel aux greffons,
  • point d'action, de coupure, de greffe (en anglais, pointcut) : endroit du logiciel où est inséré un greffon par le tisseur d'aspect,
  • point de jonction, d'exécution (en anglais, join point) : endroit spécifique dans le flot d'exécution du système, où il est valide d'insérer un greffon. Pour clarifier le propos, il n'est pas possible, par exemple, d'insérer un greffon au milieu du code d'une fonction. Par contre on pourra le faire avant, autour de, à la place ou après l'appel de la fonction.
  • considérations entrecroisées, préoccupations transversales (en anglais, cross-cutting concerns) : mélange (Un mélange est une association de deux ou plusieurs substances solides, liquides ou gazeuses qui n'interagissent pas chimiquement. Le résultat de l'opération est une...), au sein d'un même programme, de sous-programmes distincts couvrant des aspects techniques séparés.

Implémentation

Stratégies

Deux grandes stratégies de tissage d'aspects existent :

  • le tissage statique par instrumentation (Le mot instrumentation est employé dans plusieurs domaines :) du code source (Le code source (ou les sources voire le source) est un ensemble d'instructions écrites dans un langage de programmation informatique de haut niveau, compréhensible par un être...) ou du pseudo-code (En programmation, le pseudo-code est une façon de décrire un algorithme sans référence à un langage de programmation en particulier.) machine intermédiaire (bytecode java, IL)
  • le tissage dynamique lors de l'exécution du logiciel (implémentée par exemple par JAC)

Tisseurs d'aspects

  • En Java :
    • AspectJ : Extension du langage Java nécessitant donc une étape de précompilation. Le résultat est toutefois du bytecode Java (Le bytecode Java est le résultat de la compilation d'un programme dont le code source est en Java par le compilateur Java. Ce bytecode peut être exécuté sous de nombreux systèmes...) standard.
    • JAC (Java Aspect Components) : Framework (Un framework est un espace de travail modulaire. C'est un ensemble de bibliothèques et de conventions permettant le développement rapide d'applications. Il fournit suffisamment de briques logicielles et impose suffisamment de rigueur...) 100% Java.
    • Le framework Azuki : Une des fonctions du framework, pas de compilation juste par application d'un design-pattern.
    • Spring : Spring AOP
  • En C++ :
  • En .NET (C#, VB.NET...) :
  • En PHP :
  • En C :
  • En Caml :
  • En Python :
  • En Common Lisp :
  • En Ruby :
Page générée en 0.459 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique