Types Abstraits Graphiques et Classes Formelles
4.7 Prototypage et mise en uvre dans les classes concretes
Les phases precedentes nous fournissent une hierarchie des classes et des operations, ainsi qu'une description des classes formelles. Le codage dans les langage a classes est decrit dans la section 7.8. Les langages de programmationont des caracteristiques propres qui posent quelques problemes speciques mais en general assez simple a resoudre. Pour une traduction automatisee, on distingue deux etapes : la traduction directe et l'optimisation.
Traduction directe
La traduction n'est en general pas completement automatisable. Il est facile de produire la declaration de la structure de la classe et de l'interface des methodes. La production automatique du code des methodes est possible si les axiomes sont orientables en regles de reecriture. Ceci est un schema simple et evidemment incomplet que l'on doit adapter suivant le langage cible choisi. Le prototype obtenu est fonctionnel et en general assez inecace.Optimisations
Deux types d'optimisations sont pratiques jusqu'a obtenir un produit plus utilisable: ceux qui visent a changer la structure des classes ou les liens entre classes et ceux qui dependent du langage cible. Les premieres (introduction d'eets de bord, derecursivation, eco- nomie de structure) seront eectuees avec prot sur la conception abstraite en classes formelles. Les secondes seront realisees directement sur le prototype.4.8 Conclusion
Dans ce chapitre, nous avons explore quelques concepts utiles a une conception rigoureuse en programmation a objets. Une idee majeure est d'utiliser des concepts avec une double inter- pretation (TAG = automate/TAA et CF = TAA/classe) ce qui permet de faciliter les liens entre
les niveaux de description (dynamique/fonctionnel et specication/conception). Resumons les particularites de notre approche :
{ Les composants logiciels sont des objets decrits selon trois niveaux (type abstrait, classe formelle,classe concrete) pour construire progressivement et naturellement les composants logiciels.
{ Le modele TAG associe une approche description dynamique des objets a une approche description fonctionnelle d'un type de donnee.
{ Le modele CF propose une approche algebrique de la programmation a objets pour une specication et une conception de hauts niveaux.
{ Chaque langage est formel et met en uvre des mecanismes de contr^ole et de preuve, indispensable a la qualite des specications.
{ Il y independance complete entre les langages, ce qui permet de les utiliser dans des cadres dierents et assouplit l'usage de la methode. Toutefois, nombre d'outils communs sont developpes.
{ Le passage d'un niveau d'abstraction a l'autre est guide par une demarche, partiellement automatisee, qui apporte de la rigueur dans le processus de developpement.
{ Nous utilisons d'autres environnements de specication pour supporter les preuves de theoremes et la validation.
Dans les chapitres suivants, nous detaillons les deux modeles introduits et le processus de conception des types abstraits graphiques en classes formelles. Notre but n'est pas de denir une nouvelle methode d'analyse et de conception mais des concepts et des techniques qui peuvent s'integrer dans une methode de developpement a objets.
Types abstraits graphiques
"Aimezles chosesa doublesens, mais assurez- vous qu'elles aient un sens."
SachaGuitry.
5.1 Introduction
Le modeleTAG
1est un formalisme abstrait de description a objets base sur les automates
et les specications algebriques. Le comportement dynamique est la vision la plus abstraite des objets. Cette vision est ensuite anee par une specication algebrique. La liaison entre modele fonctionnel et modele dynamique est realisee par une double interpretation du modele TAG: un TAG decrit le cycle de vie d'un objet et un TAG est un type abstrait de donnee.
Le present chapitre est organise comme suit. Dans la section 5.2, nous verrons les carac- teristiques principales d'une specication graphique de TAG. Cette specication depend d'un certain nombre d'hypotheses enoncees dans la section 5.3. Ensuite nous verrons comment ex- traire dierents elements d'une specication algebrique a partir de cette specication graphique du TAG dans la section 5.4. Ces deux descriptions forment le noyau du modele. Dans la sec- tion 5.5, nous examinons quelques points sur le contr^ole et la validation des specications. Un exemple complet est donne en annexe C. Enn, des extensions du noyau sont proposees en section 5.6, notamment l'heritage.
5.2 Specication graphique de TAG
Cette section donne la syntaxe de description des types abstraits graphiques. La notation est synthetisee dans la gure 80 de l'annexe E.
5.2.1 Representation graphique
La representation graphique est composee de quatre encarts : une ent^ete comprenant no- tamment le nom du type en cours de denition, appeletyp ed'inter^et, un ensemble de prols
d'operations, des declarations de parametrage, un automate du comportement dynamique. Un certain nombre d'informations sont ajoutees a la description (dates, notes) elles servent a com- menter la description graphique pour un archivage de la documentation. Chaque propriete est
1
Typ eAbstraitdeDonneesGraphique
nommee, et donnera lieu a la generation d'un ou plusieurs axiomes. Par exemple, modelisons un compte bancaire simple par le TAG suivant:
Zone de description
des paramètres de la spécification [p1] retirer [not p2] déposer [p2] déposer [not p1] retirer ouvrir déposer
ouvrir ( num : Entier[23], int : Intitule, v: RéelP) : Cpt déposer ( Self : Cpt, m: Réel+) : Cpt
retirer ( Self : Cpt, m: RéelP) : Cpt solde ( Self : Cpt) : Réel
numéro ( Self : Cpt) : Entier[23] intitulé ( Self : Cpt) : Intitulé
crédi-
teur débi-
teur
Descriptif : Compte bancaire Type Cpt
Auteur : Pascal Andre
Version : 4 Juin 1993 Propriétés : constantes paramètres formels contraintes p1: solde(Self) - m < 0 p2: solde(Self) + m < 0 gardes : zone de description de l’auto- mate de tement compor- dont des gardes zone
Zone d’information du TAG Zone de description
des profils des opérations
Figure 32 : TAG Compte bancaire.
5.2.2 Operations
Une
operation
est une abstraction procedurale. Elle est denie d'un point de vue syntaxique par un prol.Denition 5.2.1 (prol d'operation)
Un prol d'operation est un triplet <nom, parametre, resultat>, ou parametre est une se-
quence de couples <variable, type>. et resultat est un type. Un prol d'operation est note:
oper (p 1 : Type 1 , ... p n : Type n ): Type r es .
Le
domaine
(resp.codomaine
) d'un prol d'operation est le produit cartesien des types du parametre (resp. le type resultat) de ce prol d'operation. Tout prol d'operation contient au moins une fois le type d'inter^et sinon l'operation associee releverait d'une autre abstraction de donnee. Nous utilisons la convention syntaxique suivante: si le type d'inter^et appartient au domaine alors il se trouve en premiere position et le nom de la variable associee estSelf
(connotation d'objet receveur). Comme d'usage, les operations sont classees en constructeurs et observateurs. Par extension et abus de langage, operation et prol d'operation seront confondus.
Denition 5.2.2 (constructeurs, observateurs)
SoitF un ensemble de prols d'operations et un nom de typeTI. Soient ?,?
b et'trois sous-
ensembles deF denis par:
? =fpo2F jTI = codom(po)g? b=
fpo2?jTI =2dom(po)g' =fpo2F jTI6= codom(po)g.
Les operations respectives de?,?bet'sont appelees respectivement
constructeur,construc- teur de baseetobservateur de F pour le typeTI.
Il est evident que F = ?[' i.e. ? et ' forment une partition. Dans l'exemple de la gure
32, les constructeurs sont les operations nommeesouvrir, retirer et deposer. L'operation
de nomouvrirest le seul constructeur de base. Les observateurs sont les operations de nom solde, numero et intitule. Les transitions associees aux operations denies sur tous les
5.2.3 Parametres et invariant d'une specication
Un parametre d'une specication graphique et
generique
de TAG est : soit unparametre
formel de type
(PFT), qui est en fait un nom de type2, soit une constante , appelee