• Aucun résultat trouvé

Tâche 3 : Spécification des règles de résolution

3.3 Vers un mécanisme Dynamiquement Extensible

4.1.3 Tâche 3 : Spécification des règles de résolution

C’est l’étape la plus importante dans la conception du mécanisme de composition. Une fois que les connecteurs de base ont été validés et que les motifs d’interférences ont été fournis, le Super-Designer décrit à travers un ensemble de règles de réécriture de graphe la logique qu’il va attribuer à son mé- canisme de composition. Ces règles décrivent explicitement comment résoudre les interférences en exploitant la connaissance de la sémantique des connecteurs. L’ensemble de règles de transformation que nous proposons dans cette section dérivent des travaux de Cheung [CFW09]. Nos règles de trans- formation sont binaires c’est-à-dire qu’elles explicitent comment résoudre le problème entre deux nœuds (connecteurs). Elles permettent de résoudre les interférences d’ordre 1 (entre deux nœuds). Dans le cas d’une interférence d’ordre p, au moins p − 1 règles de transformation seront appliquées. Nous détaillons trois exemples de règles de transformations : une règle pour deux connecteurs de type 1-n, une autre règle pour deux connecteurs de type n-1 et une troisième règle pour un connecteur 1-n et autre n-1. L’ensemble des règles utilisées dans notre approche est détaillé dans l’annexe A.

4.1.3.1 Règle R1 : Deux SEQ

Cette règle de résolution est appliquée dans le cas d’une interférence entre deux connecteurs de Séquence SEQ. Chaque connecteur SEQ définit un ordre d’exécution entre ces évènements de sortie. La réécriture de deux connecteurs SEQ devra conserver les relations d’ordre établies au sein de chacune de deux séquences séparément. Il existe plusieurs configurations possibles pour deux

connecteurs SEQ. Dans le cas ou ces deux connecteurs partagent un nœud, ce dernier pourra avoir un ordre différent dans chacun de deux SEQ. Une configuration possible est SEQ•[a, b] et SEQ•[a, c]. Dans cet exemple les deux connecteurs partagent le nœud a qui a le même ordre d’exécution dans les deux connecteurs. Une autre configuration possible est SEQ•[a, b] et SEQ•[c, a]. Le résultat attendu par la réécriture de ces deux configurations n’est pas le même. Dans la figure 4.6, nous représentons la réécriture de la deuxième configuration. La résultat est donné par le sous-graphe R de la figure 4.6 : tout d’abord ni ensuite nk et finalement nl. La spécification formelle de cette règle de réécriture selon le formalise défini (section 3.1) est comme suit :

Cette règle de résolution est appliquée dans le cas d’une interférence entre deux connecteurs de Séquence SEQ. Chaque connecteur SEQ définit un ordre d’exécution entre ces évènements de sortie. La réécriture de deux connecteurs SEQ devra conserver les relations d’ordre établies au sein de chacune de deux séquences séparément. Il existe plusieurs configurations possibles pour deux connecteurs SEQ. Dans le cas ou ces deux connecteurs partagent un nœud, ce dernier pourra avoir un ordre différent dans chacun de deux SEQ. Une configuration possible est SEQ•[a, b] et SEQ•[a, c]. Dans cet exemple les deux connecteurs partagent le nœud a qui a le même ordre d’exécution dans les deux connecteurs. Une autre configuration possible est SEQ•[a, b] et SEQ•[c, a]. Le résultat attendu par la réécriture de ces deux configurations n’est pas le même. Dans la figure 4.6, nous représentons la réécriture de la deuxième configuration. La résultat est donné par le sous-graphe R de la figure 4.6 : tout d’abord ni ensuite nk et finalement nl. La spécification formelle de cette règle de réécriture selon le formalise défini (section 3.1) est comme suit :

Graph_Transform(SEQ •[ni, nk], SEQ•[nk, nl])= SEQ •[ni, SEQ •[nk, nl]]

FIGURE4.6 – Exemple de règles de réécriture de deux connecteurs de SEQ

4.1.3.2 Règle R2 : AND et OR

Cette règle est appliquée dans le cas d’une interférence entre les deux connecteurs AND et OR. Le sous-graphe L de la figure 4.7 montre l’accès concurrent au port x (la variable x remplace l’identifiant du port). Chaque connecteur exprime une logique de déclenchement pour l’appel à ce port. La résolution de ce cas d’interférence revient à retrouver la logique de déclenchement du port en question. Le premier connecteur AND exige l’activation de ses deux ports d’entrées alors que le deuxième connecteur OR a seulement besoin de l’activation d’une seule entrée pour transmettre l’appel. Nous avons vu que plusieurs stratégies peuvent être choisies pour exprimer le résultat souhaité. La représentation formelle de cette règle de transformation est définit comme suit :

Graph_Transform([ni, nk]•AND, [nk, nl]•OR)= [nk, nl]•OR

FIGURE4.7 – Règle de réécriture AND et OR selon une stratégie restrictive

Pour une stratégie restrictive, qui respecte le comportement de chacun de deux connecteurs, la règle est donnée par la figure 4.7. La logique de déclenchement obtenue est la suivante : il faut avoir l’activation de deux nœuds d’entrée du [ni, nk]•AND, ou bien la deuxième entrée du connecteur OR (nl).

FIGURE4.8 – Règle de réécriture AND et OR selon une stratégie permissive

Ce problème d’interférence pourra être résolution en utilisant une stratégie permissive. La règle de réécriture selon cette stratégie est donnée par la figure 4.8. Le résultat produit favorise le comporte- ment apporté par le connecteur OR. Quelque soit l’état des évènements d’entrée du connecteur AND, avoir reçu l’un des évènements d’entrée du connecteur OR déclenchera l’appel du port de sortie.

4.1.3.3 Règle R3 : PAR et AND

La règle de transformation donnée par la figure 4.9 illustre un exemple d’interférence entre deux connecteurs appartenant à deux classes différentes. Le sous-graphe R montre la solution qui a été définie à la conception du mécanisme de composition. La formalisation de cette règle est définie par : Graph_Transform([nl, x]•AND, PAR •[ni, nk])=x•PAR •[ni, [., nl]•AND •nk]

FIGURE 4.9 – Un exemple de règles de réécriture de deux connecteurs appartenant à deux classes différentes