• Aucun résultat trouvé

Systeme favorisant la reutilisation

2.2 Derivations

3.1.1 Systeme favorisant la reutilisation

Nous proposons de de nir un systeme de transformation de speci cations alge-briques en un langage imperatif: utilisant a la fois le style fonctionnel et le style pro-cedural.

Le developpement se fait ainsi au niveau des speci cations algebriques, en bene -ciant de la clarte et de la s^urete de la programmation fonctionnelle et de la semantique algebrique. L'ecacite n'est pas apportee par le langage de bas niveau seul, mais par les possibilites d'optimisation o ertes par une description initiale abstraite et un niveau de realisation ou les defauts des langages fonctionnels (par exemple la gestion de la memoire) peuvent ^etre supprimes.

Les bibliotheques algebriques existantes peuvent avoir plus d'une implementation imperative. La derivation d'une speci cation utilisant une bibliotheque doit donc abou-tir a un programme utilisant toute l'implementation de cette bibliotheque. Cette pro-priete apporte plusieurs avantages :

 deriver toute speci cation de maniere a la tester dans un contexte precis: sta-tion ou processeur dedie, interface homme/machine di erente, environnement ou systeme d'exploitation particulier, ...

 reutiliser toute speci cation par son integration dans la bibliotheque algebrique, soit par sa derivation automatique, soit en fournissant sa realisation concrete et ce qui les lie.

 integrer un programme imperatif a la bibliotheque, et o rir ainsi son utilisation a partir d'un langage de haut niveau. Ceci est possible des lors que l'on sait lui associer sa speci cation algebrique.

42 CHAPITRE3. M 

ETHODE DED 

ERIVATION VERSDESPROGRAMMES

Les systemes formels choisis sont, d'une part, le langage LPG pour les speci cations algebriques d'origine (mais ce pourrait ^etre tout autre langage de speci cation algebri-que), et d'autre part le langage Ada pour le langage de programmation.

Ce systeme doit donc ^etre capable de passer d'un style purement fonctionnel: LPG, a un style imperatif (ou des modi cations \en-place" de variables peuvent ^etre faites par des a ectations ou des appels de procedures): Ada, et permettre ainsi de reuti-liser des bibliotheques de speci cations algebriques dont les implementations en Ada, validees, imposent les interfaces (ordre et modes xes des parametres des fonctions ou procedures).

Le schema general est decrit a la gure 3.1 suivante.

implémente Set Array Seq String Specif. Algébrique Bibliothèque Char Nat Bool Integer Impl. de Ø et Succ Array of Booleans Array List Impl. de Empty et Cons est importé par

Corps du programme Ada Spécification Ada Integer Dérivation standard de Ø and Succ Array of Booleans List Utilisateur Définition des Liens de Dérivation des opérateurs Spécifications Algébriques Spécification Ada du programme Dérivation du Corps du Programme utilise

Corps de programmes Ada

Array Choix des Liens

d'Implémentation en librairie

Dérivation standard de Empty et Cons

Fig.3.1 { Systeme d'implementation de Speci cations Algebriques avec Bibliotheque Dans ce systeme, l'utilisateur qui veut transformer en Ada une speci cation doit choisir pour chacun des operateurs de cette speci cation son style : s'il souhaite obtenir une fonction ou une procedure, son pro l : le type et le mode (in, out, in out) de chacun de ses parametres formels, et la correspondance des parametres entre ceux de l'operateur algebrique et ceux de la fonction ou procedure derivee.

Exemple 3.1:

Ayant la speci cation de l'operateur algebrique

3.1. CADREET PROBL 

EMATIQUE 43

seqnatest implementee par le typelistnat, nous devons indiquer pour une fonction ou procedure de nomtrier que nous souhaitons deriver, la correspondance de chaque parametre :

1. function trier(l: in listnat) return listnat, l'operande de

sortnat correspond alet le resultat algebrique au resultat de l'evaluation de la fonction.

2. procedure trier(l: in listnat; ltriee: out listnat), l'operande de

sortnatcorrespond au premier parametrel, et le resultat algebrique au deuxieme parametre ltrieeen retour de l'execution de la procedure.

3. procedure trier(ltriee: out listnat; l: in listnat), l'operande de

sortnat correspond au deuxieme parametre l, et le resultat algebrique au pre-mier parametre ltrieeen retour de l'execution de la procedure.

4. procedure trier(l: in out listnat), l'operande de sortnat correspond a l'unique parametre l, et le resultat algebrique au m^eme parametre l modi e en retour de l'execution de la procedure.

Le nombre de possibilites augmente avec l'arite de l'operateur, et particulierement si nous considerons les operateurs dont le co-domaine est un produit cartesien de sortes: chaque sorte du co-domaine, si elle existe dans le domaine, peut correspondre a un parametre in out dans le cas d'une derivation vers une procedure. Ceci est montre dans l'exemple suivant:

Exemple 3.2:

Soit l'operateur suivant:

insdico : (string,seq[string],dico[string]) ->(dico[string],boolean,seq[string])

un operateur d'insertion d'un mot et de sa de nition dans un dictionnaire, tel que: insdico(m;l1;d1) = (d2;e;l2) avec m un mot, l1 sa de nition, d1 un dictionnaire, et comme resultatd2egal ad1 augmente du motmet de sa de nition,eun booleen egal a vraisimavait deja une de nition dansd1, etl2sa de nition precedente si elle existait. Cet operateur peut avoir comme implementation, avec une correspondance evi-dente:

1. procedure dicinsert(cle: in str20;

new def: in liste str20; dico: in str strlist map; new dico: out str strlist map; existe: out boolean;

anc def: out liste str20 ) 2. procedure dicinsert(cle: in str20;

new def: in liste str20; dico: in out str strlist map;

44 CHAPITRE3. M 

ETHODE DED 

ERIVATION VERSDESPROGRAMMES

existe: out boolean; anc def: out liste str20) 3. procedure dicinsert(cle: in str20;

def: in out liste str20; dico: in out str strlist map; existe: out boolean)

4. ...

De nombreuses consequences decoulent du choix du style et du pro l. La premiere est la forme de l'appel: soitt=g(t

1

;:::;op(:::);:::;t

n) selon queopest derive en une fonction F ou une procedure P, il pourra ^etre en position de parametre e ectif dans le code derive de t ou devra preceder ce code. Dans ce cas, ce sera une variable (ou une expression-gauche) en parametre e ectif de sortie de Pqui sera parametre e ectif d'entree ou entree-sortie du code derive de g. Une seconde consequence qui rend plus complexe la derivation d'un texte imperatif est la destruction de la valeur d'une variable en parametre e ectif d'un parametre en mode entree-sortie. Ces cas seront detaillees dans la section 3.1.3 traitant de la problematique.