• Aucun résultat trouvé

Espace de conception des templates

3.2 Ingénierie Dirigée par les Modèles Basée sur les Templates

3.2.2 Espace de conception des templates

Comme nous l’avons déjà indiqué, cet espace vise l’élaboration de nouveaux templates et l’adap- tation de templates existants par généralisation des situations applicatives. Nous avons identifié plusieurs activités de conception pour supporter ces objectifs, présentées à gauche en figure3.13:

(A) la paramétrisation,

(B) la composition de templates, (C) la décomposition de templates, (D) l’induction,

(E) la recherche de templates

Paramétrisation Cette activité consiste à adapter des templates en ajoutant ou retirant des paramètres. Les concepteurs de templates sont amenés à réaliser ce type d’adaptations pour plu- sieurs raisons. Il s’agit d’ajuster le paramétrage pour élargir les possibilités d’application d’un template. Une autre raison est d’augmenter les capacités d’enrichissement d’un template. Enfin, le besoin d’avoir plusieurs variantes d’un même template via leur paramétrage motive également cette activité.

La figure3.14illustre cette activité avec la paramétrisation du modèle(a) représentant le patron de conception Observer. Avec ce template, la fonctionnalité d’observation peut être installée dans n’importe quel contexte où un observateur et un sujet à observer sont présents et reliés entre eux.

Cependant, au cours d’un projet de modélisation, les spécifications évoluent, menant à de nou- velles façons d’appliquer certaines des fonctionnalités. L’activité de paramétrisation permet de répondre à ce besoin. Ceci est illustré en figure3.14avec l’exemple du template ObserverPattern (variante b).

Dans le cas présent, seul le paramétrage du template a changé. Contrairement à la variante précédente (a), l’association obs n’a plus le statut de paramètre dans ce template et fait donc

Figure 3.14 – Adaptation des paramètres du template

partie des enrichissements qu’il apporte. Ce template est applicable sur l’ensemble des contextes dans lesquels la relation d’observation est absente, tel que dans le modèle CarAgency pour l’installer. À travers cet exemple, il est intéressant d’observer que la diminution du nombre de contextes sur lesquels un template est applicable va de pair avec la définition supplémentaire d’éléments du template comme éléments paramètres. A l’inverse, les fonctionnalités sont applicables à des ensembles plus larges de modèles lorsque le statut de paramètre est retiré à des éléments du template.

Dans le cadre de cette activité de paramétrisation, des facilités doivent être offertes aux concep- teurs de template afin de contrôler et vérifier le paramétrage. Dans le contexte des aspectual templates, la vérification doit être faite que l’ensemble des paramètres conservent une structure de modèle. Des facilités de recommandation automatique de paramétrage sont attendues. Pour l’exemple du template Observer, la sélection de l’association en tant que paramètre requiert également que les classes aux extrémités soient définies en tant que paramètres. Cette recommandation est proposée automatiquement au concepteur lorsqu’il expose l’association comme paramètre.

Dans le chapitre 4, consacré à la mise en œuvre de cette ingénierie, nous présenterons différents opérateurs destinés à supporter cette activité de paramétrisation.

Composition de templates La composition de templates est une activité qui permet de construire un nouveau template à partir d’autres templates. Cela est intéressant quand on sou- haite élaborer un template en réutilisant les fonctionnalités génériques fournies par d’autres templates. Cette composition s’effectue en combinant le contenu des templates mais cela re- quiert également d’examiner la combinaison des paramètres. C’est le cas en particulier quand les éléments à combiner de chaque template ne sont pas tous les deux paramètres. Faut-il conserver ou non ce statut de paramètre pour l’élément correspondant dans le template résultat ?

Dans la section3.1.2, traitant des aspectual templates, nous avons présenté un mode de composi- tion de templates basé sur l’opération d’application. D’autres modes de composition de templates sont envisageables, notamment par extension des modes de composition qui existent pour les mo-

dèles de manière générale, tels que l’import et le merge d’UML (cf. section 2.1). La figure 3.15

montre un exemple où la fusion de templates se révèle intéressante.

unregister(o : Observer) ObserverStruct

getValue() : T

Figure 3.15 – Composition par merge

Dans cet exemple, deux templates, correspondant aux variantes push et pull du patron Observer (Shvets et al. [95]), sont obtenus en fusionnant un template ObserverStruct, exprimant la structure du patron en terme de Subject et d’Observer, avec un template exprimant la spécificité de chaque notification, respectivement PullNotification et PushNotification. Comme, on peut le voir sur cette figure, ces templates enrichissent la classe Observer du template ObserverStruct avec une méthode update de notification correspondante qui est également paramètre.

De façon plus générale, quels que soient les modes offerts dans cette activité de composition de templates, il est important que le paramétrage reste cohérent dans les templates produits. C’est ce que nous avons expliqué dans le cadre des aspectual templates où le template résultant d’une application de deux aspectual templates doit toujours rester un aspectual template. Cette contrainte est essentielle pour garantir la composabilité des templates dans les séquences d’application et les assemblages. Nous aurons l’occasion de revenir sur ce point dans la suite de ce chapitre, notamment lorsque nous discuterons d’application de templates à une hiérarchie de modèles (cf section 3.5).

Recherche de templates Lorsque le dépôt contient un grand nombre de templates, des facilités de recherche spécifiques sont nécessaires. Par exemple, en phase de conception d’un template, un concepteur doit être capable de rechercher quels sont les templates incluant déjà certaines fonctionnalités, que ce soit pour les réutiliser ou pour s’en inspirer. De même, lorsqu’un concepteur compose des templates, il doit être en mesure de rechercher quels sont les templates composables avec d’autres. Ces deux situations nécessitent une recherche dans le dépôt de modèles mais, selon la situation, on s’intéressera au contenu du template ou à ses paramètres. Ainsi, dans le premier cas, la recherche se focalisera sur le contenu des templates existants dans le dépôt, tandis que dans le second cas, la recherche sera guidée par les paramètres de ces templates. Pour réaliser ces deux types de recherche, la recherche de sous-modèles proposée dans Carré et al. [25] et Vanwormhoudt et al. [102] et rapportée au contenu ou au modèle paramètre du template, est une solution. Il est à noter que ces capacités de recherche peuvent également être utiles aux concepteurs de systèmes lorsqu’ils ont besoin de trouver un template disposant

d’une fonctionnalité particulière pour l’appliquer à leur système.

Décomposition de templates La décomposition est une activité qui s’avère utile lorsqu’on souhaite extraire une partie d’un template pour en faire un template. Par exemple, dans le template ObserverPattern donné en figure 3.14, la notification de changement de valeur s’effectue dans un mode pull, ce qui n’est pas forcément adapté à tous les types de situations. En effet, pour les besoins d’un projet, on peut vouloir adopter une notification en mode push et par conséquent avoir besoin d’une version différente du template. Pour obtenir cette variante, on peut procéder à partir de rien mais il est également envisageable d’utiliser la structure du template ObserverPattern de départ, notamment les classes Subject, Observer et l’association qui les relie. Cela est réalisable par extraction des éléments concernés à partir du template initial. La difficulté de l’extraction dans le cas des templates porte sur la gestion du statut des paramètres. Ces éléments doivent-ils rester systématiquement paramètres ou cela dépend-il des autres éléments auxquels ils sont associés dans le template initial ? Prendre en charge cette activité de décomposition de templates dans l’ingénierie nécessite approfondissement.

Induction de templates Comme nous l’avons vu à plusieurs reprises, l’élaboration d’un tem- plate peut avoir comme source la connaissance de solutions génériques comme les patrons de conception. Cependant, dans des domaines métiers spécifiques, la conception d’un template peut aussi avoir comme source un ensemble de modèles issus de différents projets de modélisation et disposant de structures ou de fonctionnalités proches ou comparables. Dans ce cas, il est inté- ressant de factoriser ces modèles en un template dont les paramètres prendraient en compte la variété des situations de modélisation rencontrées dans les différents projets. Une façon de mettre en œuvre l’induction d’un template est d’identifier les éléments communs et les éléments variables des modèles, puis de construire le template en transformant les parties variables en paramètres. Cette synthèse de templates par induction soulève de nombreuses questions à étudier.