Réunion du 02/07/2008

Ordre du jour

Compte Rendu

Participants

Annie Ressouche, Gaetan Rey, Stéphane Lavirotte, Jean-Yves Tigli, Vincent Hourdin, Valérie Roy, Domnica Pavel, Vivien Fighiera.

Exposé de Domnica

Domnica a fait un exposé sur l' état d'avancement de ses travaux. Elle a présenté le langage synchrone LS dédié à la définition de connecteurs synchrones complexes qui décrivent la gestion des accès multiples aux composants de WComp. Elle a aussi présenté la sémantique du langage qui donne une définition précise du comportement des connections (programmes LS) et qui guidera l'implémentation à faire.

slides de la présentation. rapport intermédiare.

Définition de l' implémentation dans WComp des connecteurs complexes

Nous avons défini une première implémentation des travaux de Domnica dans WComp (voir le compte rendu de Vivien)

Compte Rendu Technique

Rappels sur WComp

Caractéristiques d'un connecteur

Actuellement WComp permet de créer des connecteurs standards entre les diffèrents composants. Un connecteur standard est caractérisé par: Voici une commande exemple simple d'ajout d'un connecteur standard dans WComp:

AddLink(composantEmetteur, composantRecepteur, evenementAssocie, methodeAInvoquer, {accesseur1, accesseur2,..., accesseurn})

Traitement d'un événement

Un événement est géré de la manière suivante:
  1. un événement est émis à partir du composant émetteur (voir 1 du schéma ci-dessous)
  2. les valeurs des arguments sont récupérées, via l'appel aux accesseurs du composant émetteur (voir 2 du schéma)
  3. la méthode du composant cible est invoquée (voir 3 du schéma)

Evolution de WComp

Connecteur complexe

Le but est d' étendre le connecteur standard de WComp. En effet l'objectif est de pouvoir connecter un ou plusieurs composants émetteurs d' événements et un ou plusieurs composants récepteurs. Ce type de connecteur est appelé "connecteur complexe".

Caratéristique d'un connecteur complexe

Un connecteur complexe est caractérisé de la manière suivante: Voici une commande d'ajout d'un connecteur complexe qui en résulterait :

AddLink({composantEmetteur1,..., ComposantEmetteurn}, {composantRecepteur1,..., composantRecepteurm}, logiqueDeDeclenchement, {methodeAInvoquer1, ..., methodeAInvoquerk}, { accesseur1, accesseur2, ..., accesseurl}).

Fonctionnement d'un connecteur complexe

Un connecteur complexe est décomposé:
  1. d'un composant (A sur le schéma ci dessous) qui a pour tâche de vérifier que la logique de déclenchement est validée. Pour cela il capte les événements émis par les composants émetteurs. Si la logique de déclenchement est respectée, ce composant déclenche un événement qui provoque l'appel à la méthode du composant B qui gère la logique de contrôle réactive du connecteur complexe;
  2. un composant (B sur le schéma) gère la logique de contrôle réactive du connecteur complexe. Il émet des événements pour les différentes invocations de méthode des composants récepteurs.
  3. chacun de ces événements est récupéré par un composant (C sur le schéma). Son rôle consiste à récupérer les paramètres effectifs pour chaque méthode invoquée, via des accesseurs. Puis ce composant provoque un appel à la méthode du composant récepteur correspondant avec les paramètres attendus.

Implémentation d'un connecteur complexe dans WComp

Pour ajouter pratiquement un connecteur complexe dans WComp, nous allons suivre les étapes suivantes:

  1. Ajout des différents composant dans WComp
    Cette étape consiste à ajouter les différents composants dans WComp. Pour cela les commandes suivantes sont exécutées:

    AddComponent(composantA)
    AddComponent(composantB)
    AddComponent(composantC1)
    .....
    AddComponent(composantCn)

  2. Ajout des connecteurs entre les composants émetteurs et celui de déclenchement
    La seconde étape consiste à ajouter les connecteurs entre les composants émetteurs et le composant responsable de la logique de déclenchement (composant A). Les liaisons réalisées lors de cette étape dépendent de la logique de déclenchement. Voici les commandes qui résultent si tous les composants interviennent dans la logique de déclanchement:

    AddLink(composantEmetteur1, composantA, evenementAssocie1, methodeComposantA1)
    .....
    AddLink(composantEmetteurn, composantA, evenementAssocien, methodeComposantAn)

  3. Ajout du connecteur entre le composant de déclenchement et celui de control réactif
    La troisième étape consiste à construire le connecteur entre le composant responsable de la logique de déclenchement et celui responsable de la logique réactive:

    AddLink(composantA, composantB, evenementComposantA, methodeComposantB)

  4. Ajout des connecteurs entre le composant de control réactif et ceux de collecte des paramètres
    La quatrième étape consiste à connecter le composant responsable de la logique de contrôle réactive aux composants responsables de la collecte des paramètres. La construction de ces liens dépend des méthodes invoquées des composants récepteurs. Si chacun des composants doit collecter un paramètre on obtient:

    AddLink(composantB, composantC1, evenementComposantB1, methodeComposantC1)
    ....
    AddLink(composantB, composantCn, evenementComposantBn, methodeComposantCn)

  5. Ajout des connecteurs de collecte des paramètres
    Cette cinquième étape consiste à construire les connecteurs permettant aux composants responsables de la collecte des paramegrave;tres de réaliser cette collecte. Ces liens dépendent des méthodes invoquées des composants récepteurs. Si pour l'invocation de chaque méthode d'un composant récepteur il faut utiliser un accesseur, alors les commandes WComp qui en résultent sont les suivantes:

    AddLink(composantC1, composantEmetteur1, evenementAccesseur1, accesseur1)
    ...
    AddLink(composantCn, composantEmetteurn, evenementAccesseurn, accesseurn)

  6. Ajout des connecteurs d'invocation des méthodes des composants récepteurs
    Cette dernière étape consiste à connecter les composants responsables de la collecte des param$egrave;tres aux composants récepteurs. Les commandes WComp correspondantes sont:

    AddLink(composantC1, composantRecepteur1, evenementInvocationRecepteur1, methodeRecepteur1)
    .....
    AddLink(composantCn, composantRecepteurn, evenementInvocationRecepteurn, methodeRecepteurn)

Le langage LS

Le langage LS permet de décrire et formalise les connecteurs complexes. Voici sa grammaire. Sa sémantique est décrite dans le rapport intermédiaire le la section.

Par exemple, le langage LS possède un opérateur de connection (=>) qui permet d'associer un évènement à une méthode. Cette instruction est traduite dans WComp de la façon suivante:

Un élément important de ce langage est que sa sémantique s'appuie sur la terminaison des appels de méthodes. Cet exemple de code LS illustre cette nécessité: I1 >> I2 (>> est l'opérateur de séquence de LS). Le code LS précédant indique d'exécuter l'instruction I2 une fois l'instruction I1 terminée. Pour exécuter l'instruction I2 il savoir quand la première instruction s'est terminée. Le meilleur moyen d'avoir cette information est d'utiliser un booléen de terminaison pour chaque instruction.

En l'état actuel, le langage LS permet de décrire un connecteur standard ou la logique de contrôle réactive d'un connecteur complexe. Dans les deux cas, le langage ne permet pas de réaliser des appels à des accesseurs. Pour pallier à ce manque, des extensions de ce langage seront progressivement réalisées.

Points à clarifier

Le cas d'un événement dont les valeurs des paramètres de la méthode à invoquer sont directement passées en paramètre. En l'état actuel, WComp permet uniquement de récupérer les valeurs des paramètres en utilisant des accesseurs qui n'ont pas de paramètres.

On voudrait pouvoir créer un connecteur du type suivant:

Cela pose le problème de son application pour un connecteur complexe. En effet dans ce cas, les données des paramètres transmises par l'événement sont récupérées par le composant responsable de la logique de déclenchement du connecteur (A sur le schéma ci-dessous). Cependant, ce sont les composants dont le rôle consiste à récupérer les paramèl;tres (C sur le schéma) qui on besoin de ces valeurs.

Une solution consisterait à utiliser un type de composants supplémentaires (D sur le schéma ci-dessous). Sa raison d'être serait d'extraire les données contenues par les paramètres des événements émis par les composants émetteurs. Ils doivent aussi permettre aux composants responsables de la collecte des données de les récupérer. En dernier lieu ils doivent transmettre les événements qu'ils re&ccdeil;oivent, sans leurs données, au composant responsable de la logique de déclenchement.

L'introduction de cette extension du connecteur complexe provoque une modification de la formalisation du connecteur. Cette extension induit la formalisation suivante :

Travaux futurs

Définir le fonctionnement de la logique de déclenchement. C'est-à-dire la définir formellement ainsi que son traitement.