• Aucun résultat trouvé

Exemples de combinaison de flot de contrôle et de flot de données

Chapitre 2. Programmation Visuelle et Enseignement Assisté par Ordinateur

2.2 Paradigmes flot de contrôle et flot de données

2.2.4 Exemples de combinaison de flot de contrôle et de flot de données

Dans notre cas, nous avons commencé à partir d'un langage visuel simple qui a été, à l'origine, basée sur le paradigme de flot de contrôle. Nous y avons intégré le paradigme de flot de données. Dans le langage ainsi enrichi, nous pouvons considérer les données dans le déroulement des traitements et nous pouvons facilement spécifier, sans constructions additionnelles, les diverses structures de contrôle.

2.2.4 Exemples de combinaison de flot de contrôle et de flot de données Plusieurs développements ont été faits dans le domaine de la programmation visuelle pour ajouter de diverses structures de contrôle dans un langage basé sur le paradigme de flot de données. C'est pourquoi la plupart des langages visuels qui combinent les paradigmes flot de données et flot de contrôle sont des langages de flot de données auxquels des constructions des structures de contrôle (itération, exécution conditionnelle, séquencement, ...) ont été ajoutées. Ces extensions sont parfois plus ou moins complexes. Nous allons présenter quelques-uns de ces langages visuels basés sur le paradigme de flot de données mais qui sont enrichis par des constructions de contrôle.

2.2.4.1 Le langage V

Le langage visuel de flot de données V [Auguston97a][Auguston97b][Auguston97c] est un langage avec une représentation visuelle des dépendances entre les données et les processus.

Il a des constructions d'itération attachées à l'utilisation des vecteurs et des matrices comme structures de données, et des opérateurs pour examiner ces structures dans un ordre donné (du premier au dernier ou l'inverse), pour les mettre ensemble dans une simple valeur, ou pour adresser des éléments individuels.

Le langage V définit également la notion de tampon10 par lequel on peut accéder à plusieurs éléments consécutifs du flot de données indépendamment de leur inclusion dans une structure de données, aussi bien qu'un mécanisme d'assortiment de modèle11 pour lier des éléments consécutifs avec des variables séparées.

10 Buffer

11 Pattern matching

24 Chapitre 2. Programmation Visuelle et Enseignement Assisté par Ordinateur

Avec ces diverses caractéristiques, le langage V est presque purement basé sur le flot de données. Néanmoins, il inclut une opération qui comporte un ordonnancement procédural: la boîte d'expression conditionnelle qui peut contenir des expressions booléennes multiples avec les valeurs de sortie associées. Chaque expression est évaluée consécutivement, commençant par le haut et passant à celle au-dessous d'elle si l'expression booléenne est évaluée à faux, et ainsi de suite. Le langage V a donc la notion de commutateur conditionnel de flot des données (Figure 2.4) pour le traitement itératif, et une construction itérative spécialisée basée sur l'assortiment de modèle pour les vecteurs et matrices. Le commutateur conditionnel de flot de données est utilisé pour contrôler les boucles dans les diagrammes de flot de données (exemple dans Figure 2.5), et le modèle itératif définit une itération sur un vecteur ou sur une ligne ou une colonne d'une matrice. Etant donné ses structures de données de base, le langage V semble être limité principalement aux applications numériques.

Figure 2.4 Commutateur conditionnel de flot de données [Auguston97b]

Figure 2.5 Calcul itératif de factorielle [Auguston97a]

2.2.4.2 VIPERS

Dans le langage VIPERS [Ghittori98], la présence des cycles dans le graphe de programme est admise pour s'attaquer à des itérations séquentielles. VIPERS utilise des formes compactes simulant les comportements de boucle (bloc FOR, bloc FOREACH et bloc WHILE). Selon le modèle de flot de données, les programmes VIPERS sont des graphes dans lesquels des jetons de données circulent le long des arcs entre les nœuds (modules) qui transforment les jetons de données. Pour réaliser une synchronisation correcte, VIPERS utilise des signaux de contrôle reliant les ports des blocs de contrôle. S'il existe un signal entre un port de contrôle de sortie (du côté droit) d'un bloc et le port de contrôle d'entrée (du côté gauche) d'un autre bloc, alors le deuxième bloc ne peut pas être exécuté avant le premier.

La Figure 2.6, tirée de [Ghittori98], représente l'implémentation du bloc FOREACH dans VIPERS.

Figure 2.6 Implémentation du bloc FOREACH de VIPERS

26 Chapitre 2. Programmation Visuelle et Enseignement Assisté par Ordinateur

2.2.4.3 Prograph

Figure 2.7 Calcul récursif de factorielle en Prograph

Prograph [Steinman95] est un langage iconique basé sur le flot de données avec diverses constructions de contrôle. Il n'y a cependant aucun flot de contrôle visuellement explicite. Le premier mécanisme de contrôle dans Prograph est la possibilité d'avoir des multiples cas pour la même méthode. Les cas sont testés dans l'ordre, s'ils se terminent en échec ou si une annotation "next case" est rencontrée, jusqu'à ce qu'un cas se termine avec succès. En outre, Prograph inclut deux pseudo contrôles: "Finish" et "Terminate" pour stopper les constructions d'itération. Le flot de contrôle existe ainsi dans Prograph, mais il n'est pas visible. Prograph est aussi un environnement de programmation visuelle orienté objet [Cox95].

Les fenêtres de la Figure 2.7 présente des méthodes écrites en Prograph pour le calcul récursif de factorielle.

2.2.4.4 LabVIEW

LabVIEW [LabVIEW98] est principalement basé sur le formalisme de flot de données, mais il ajoute des constructions de contrôle pour les itérations (For Loop et While Loop), séquencement explicite (Sequence) et exécution conditionnelle (case). Puisque normalement son formalisme de flot de données n'est pas approprié pour passer des données d'une boucle d'itération à la prochaine, LabVIEW définit la notion de registre à décalage (shift register). Un autre inconvénient des structures de contrôle de LabVIEW est que les diverses étapes d'une séquence ne sont pas visibles en même temps. L'utilisateur peut seulement voir une étape à la fois. Il en est de même pour l'exécution conditionnelle, pour laquelle seulement un cas (figure fonctionnelle correspondant à une valeur des données testées) est visible à un moment.

LabVIEW a également la notion de dépendance artificielle de données (artificial data dependency), qui est une condition dans laquelle l'arrivée des données plutôt que leur valeur déclenche l'exécution d'un objet. Ainsi la dépendance artificielle de données peut être vue comme une forme de jeton de contrôle.

La Figure 2.8 illustre l'utilisation de la boucle While. Ce diagramme spécifie la lecture continue d'une température jusqu'à ce qu'un bouton est activé.

28 Chapitre 2. Programmation Visuelle et Enseignement Assisté par Ordinateur

Figure 2.8 Mesure de température avec LabView (While loop)

2.2.4.5 La synthèse de Hils

Un aperçu de 15 langages de programmation visuelle (y compris Prograph [TGS89] et Cantata [Rasure91]) utilisant le paradigme de flot de données est présenté dans [Hils92].

L'itération, y compris les structures de contrôle, est une des alternatives de conception qui peut être utilisée pour enrichir le modèle de flot de données pur. Elle est une des caractéristiques qu'un langage de programmation basé sur le flot de données nécessite pour être puissant. Selon cet aperçu, quelques langages visuels de flot de données fournissent l'itération sous forme de cycles dans le graphique de flot de données, et d'autres utilisent des constructions de flot de contrôle spéciales. Le problème avec l'addition des constructions spéciales est que si d'autres formes de contrôle s'avèrent utiles, des nouvelles constructions devraient être créées. Dans le langage de notre système DIVA-cd, puisque les paradigmes de flot de contrôle et de flot de données sont complémentaires, nous n'avons pas besoin de constructions particulières.