• Aucun résultat trouvé

4.3 Les Aspects d’Assemblage

4.3.2 Le tisseur d’Aspects d’Assemblage

Le tisseur d’Aspects d’Assemblage est l’entité logicielle qui réalise l’ensemble de ces traitements. Nous allons maintenant l’étudier plus en détails ainsi que le formalisme introduit dans cette thèse. L’architecture du tisseur peut être décomposée en deux parties. La première traite des AAs et a pour but de transformer les greffons de ces derniers en assemblages de composants. Pour ce faire, le traite- ment sur les AAs repose sur trois étapes. Le pointcut matchingÀ qui identifie l’ensemble des points de jonction sur lesquels peut s’appliquer l’AA. Les greffons des AAs utilisent ensuite ces points de jonction de manière à ce que chaque variable soit remplacée par un point de jonction. Ceci est réa- lisé par la fabrique de greffonÂ. Lorsque plusieurs points de jonction peuvent remplacer une même variable, plusieurs instances du greffon peuvent être créées. La manière selon laquelle les points de

jonction sont associées pour remplacer les variables des greffons est définie par le processus de combi- naison de point de jonctionÁ en amont de la fabrique de greffon. La seconde partie du tisseur travaille uniquement avec les instances de greffon générées par la fabrique (des assemblages de composants) et a pour but de les composer. Cela consiste tout d’abord à les superposerÃ, afin de produire une unique instance. Ensuite, les règles de l’instance qui interférent les unes avec les autres sont fusionnéesÄ afin de produire l’assemblage adapté. Dans cette section, nous allons étudier en détail l’architecture du tisseur telle que présentée en FIGURE4.16.

FIGURE4.16 – Le tisseur d’Aspects d’Assemblage.

4.3.2.1 Traitement des aspects

La première étape d’un cycle de tissage consiste en la reconnaissance des points de coupe, nous parlerons du mécanisme de Pointcut Matching À. Il s’agit d’une fonction qui prend en entrée la section point de coupe d’un aspect Pointcuti (une liste de règles Rule0, ..., Rulej) et la liste des ports

(les points de jonctions) de l’assemblage initial J point = {port00, ..., portnz}. Cette fonction produit

un ensemble de listes de points de jonction LJPoint = {l0, ..., lj}. Chaque liste lkcontient les ports qui

vérifient la règle Rulek. Cette liste de points de jonction pourra ensuite être filtrée, par exemple afin

d’autoriser le tissage d’AA uniquement sur les ports de certains composants ou encore pour bloquer le tissage dans certaines conditions. Nous obtenons donc après filtrage de nouvelles listes de points de jonction de cardinalité inférieure ou égale à celles qui ont été fournies en entrée du filtre.

Les éléments de ces listes seront les interfaces entre l’application et les greffons. Ainsi les greffons pour s’appliquer requièrent la présence d’un certain nombre de points de jonctions, en fait un point de jonction par règle des points de coupes. Ces règles ayant potentiellement identifiées plusieurs points de jonctions, le greffon doit pouvoir s’appliquer sur toutes les combinaisons possibles entre

les points de jonctions des différentes listes (pour rappel une liste par règle de points de coupe). Ces combinaisons sont calculées grâce au mécanisme de JointPoint CombinationÁ. Ce dernier construit à partir des listes de composants obtenues lors du pointcut matching de nouvelles listes, appelées combinaisons, dans l’ensemble JPointComb. Chaque combinaison est de cardinalité égale au nombre de règles se trouvant dans les points de coupe. Toute combinaison d’une autre cardinalité ne pourra être appliquée.

L’ensemble JPointComb peut être filtré pour éliminer certaines combinaisons de points de jonction. La liste résultante constitue le paramètre d’entrée de la fonction Advicefactory Â. Cette fonction utilise le greffon de l’aspect d’assemblage qui est constitué d’un ensemble de règles pour générer des instances de greffons. Ceci est réalisé en remplaçant les composants et ports décrits dans ces greffons par les points de jonction, s’il ne s’agit pas de composants instanciés par le greffon lui-même. Il s’agit donc de transformer une description abstraite d’assemblages en assemblages de composants. Ce traitement est appliqué pour chaque combinaison de points de jonction. Cette chaîne PointcutMatching, JPCombination et AdviceFactory sera dupliquée pour chaque AA traité par le tisseur. Ceci offre une forte modularité et permet de changer les différents algorithmes mis en place en fonction des AAs traités. Par la suite, tous les résultats de ces chaînes de traitement seront fusionnés.

Cette architecture fortement modulaire a été implémenté dans une approche à composants avec la plateforme LCA [87]. Chacune des entités décrites dans la FIGURE4.16 correspond à un composant. De cette manière, le tisseur peut lui même être dynamiquement adapté et les chaînes correspondant au traitements réalisés sur les AAs sont générés dynamiquement (instanciation des composants cor- respondants) lors de la sélection d’un AA et vice versa lors de leur désélection.

4.3.2.2 Traitement des assemblages

Parallèlement à cela, un modèle de l’assemblage initial est extrait du modèle d’assemblage de composant de l’application. Ceci peut être réalisé en conservant une image de l’application initiale. En effet marquer les composants et liaisons issues d’une adaptation n’est pas suffisant puisque des liaisons peuvent avoir été réécrites lors de la fusion. Le mécanisme de composition considère donc un ensemble d’instances de greffon en vue d’en générer une unique, représentant l’assemblage initial. Nous pouvons globalement le formaliser comme suit, ϕt étant l’opération de composition à un instant

tdont le premier paramètre est l’instance de greffon représentant l’assemblage initial :

ϕt(iAdvice00, ..., iAdvicei j) = iAdvicei+1 j (4.18)

Il s’agit de prendre indépendamment chaque instance de greffon (chaque assemblage) et de les superposer les unes aux autres avec l’instance correspondant à l’assemblage initial. Le mécanisme de composition produira donc une seule instance de greffon GF qui représente l’assemblage adapté. Nous

pouvons identifier deux étapes dans le moteur de composition. La première a pour objectif de superpo- serà toutes les instances de greffon (des assemblages de composants) les unes avec les autres. C’est durant cette étape que peuvent apparaître des interférences entre les AAs. L’étape suivante consiste donc à résoudre ces interférencesÄ. Pour ce faire, le tisseur peut utiliser divers algorithmes. Ces al- gorithmes de fusion doivent garantir la cohérence de l’application tissée mais aussi la propriété de symétrie de l’opération de tissage.

Documents relatifs