SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Génie logiciel avancé
Mihaela Sighireanu
UFR d’Informatique Paris Diderot, LIAFA, 175 rue Chevaleret, Bureau 6A7
http://www.liafa.jussieu.fr/∼sighirea/cours/genielog/
Spécification formelle: Types de données abstraits (Adt)
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 1 / 28
Résumé
1 Introduction
Objectifs
Méthodes formelles
Spécification formelle
2 Types de données abstraits (ADT)
Motivation
Signature
Termes
Axiomes
Spécification algébrique
Spécification incrémentale
Exemple projet
Utilisation des ADT
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 2 / 28
Introduction Objectifs
Objectifs
Montrer comment les techniques de spécification formelles aident à découvrir
des problèmes dans la spécification du système.
Définir et utiliser les techniques algébriques de spécification (ADT) pour
spécifier les interfaces.
(Cours suivants :) Définir et utiliser des techniques basées sur les modèles
pour la spécification des comportements.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 3 / 28
Introduction Méthodes formelles
Méthodes formelles
Les spécifications formelles font partie d’une collection de techniques connues
sur le nom de “méthodes formelles”.
Les méthodes formelles ont à la base des représentations mathématiques du
logiciel ou du matériel.
Les méthodes formelles contiennent :
Spécifications formelles,
Analyse et preuve de spécifications,
Développement par raffinement des spécifications,
Vérification de programmes.
Prévues représenter LA technique de développement, elles sont utilisées que
dans des domaines “critiques” à cause de leur coût (matériel, en temps et
humain).
Le principal bénéfice de leur utilisation est la réduction du nombre d’erreurs
dans le logiciel.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 4 / 28
Introduction Spécification formelle
Processus de spécification et de design
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 5 / 28
Introduction Spécification formelle
Coût de la spécification formelle
La spécification formelle demande plus d’effort dans les phases avant du
projet.
Elle réduit les erreurs (incomplétude ou inconsistance) de la spécification des
charges.
Ainsi, le nombre de changements du projet à cause d’un problème de
spécification de charges est réduit.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 6 / 28
Introduction Spécification formelle
Classes de spécifications formelles
Algébriques : le système est spécifié en termes d’ensembles, d’opérations et
de leur relation.
Ex. séquentiel : Act One, Larch, OBJ.
Ex. concurrent : Lotos.
Basés sur les modèles : le système est spécifié en termes de modèle à états et
utilisent des opérations qui changent l’état du sytème.
Ex. séquentiel : Z, VDM, B.
Ex. concurrent : CSP, réseaux de Pétri, automates hiérarchiques (statecharts).
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 7 / 28
Types de données abstraits (ADT) Motivation
Motivation
Spécification formelle d’interfaces :
Les grands systèmes sont décomposés en sous-systèmes qui se composent à
travers d’interfaces bien définies.
La spécification des interfaces des sous-systèmes permet leur développement
independant.
Les interfaces peuvent être définies comme des types de données abstraits ou
des interfaces de classes.
L’approche algébrique pour la spécification formelle des interfaces est
souhaitable car elle permet pour les opérations de l’interface :
de les définir formellement,
d’analyser formellement (preuve) leur comportement,
de dériver l’implémentation d’un objet ou d’un type en partant de sa définition
formelle.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 8 / 28
Types de données abstraits (ADT) Signature
Structure d’une spécification d’ADT
4 parties :
Introduction : définit la sorte (nom du type) et déclare les autres spécifications
utilisées.
Description : (optionnelle) décrit de manière informelle les opérations de la sorte.
Opérations : définit la syntaxe des opérations dans l’interface et leurs
paramètres.
Axiomes : définit la sémantique des opérations sous forme d’équations.
Spécification (sort + opérations) = signature.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 9 / 28
Types de données abstraits (ADT) Signature
Exemple : spécification ADT des booléens
type BOOLEAN is
sorts bool
(* Type boolean avec les opérations usuelles *)
opns
false, true : -> bool
not : bool -> bool
_and_, _or_, _xor_, _implies_, _iff_, _eq_, _ne_
: bool, bool -> bool
eqns
forall x, y : bool
ofsort bool
not (true) = false;
not (false) = true;
x and true = x;
x and false = false;
x or true = true;
x or false = x;
x xor y = (x and not (y)) or (y and not (x));
x implies y = y or not (x);
x iff y = (x implies y) and (y implies x);
x eq y = x iff y;
x ne y = x xor y;
endtype
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 10 / 28
Types de données abstraits (ADT) Signature
Signature
Sort : le(s) type(s) à définir.
Opérations : plusieurs classes par rapport au type défini
constructeur : définit les valeurs du type ; exemples : true, false.
inspecteur : renvoie les composantes du type ; exemple : tête de la liste.
observateur : décrit la relation (les propriétés) du type avec les autres types ;
exemple : longueur liste.
Les axiomes doivent définir complètement et correctement les opérations (voir une
méthode plus loin).
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 10 / 28
Types de données abstraits (ADT) Signature
type STRING is imports CHARACTER, NATURAL, BOOLEAN
sorts string
opns
new : -> string
append : string, string -> string
add : char, string -> string
size : string -> nat
isEmpty : string -> bool
eq : string, string -> bool
first : string -> char
eqns
forall x, y : string, c,d : char
ofsort bool
isEmpty(new) = true;
isEmpty(add (c, x)) = false;
eq(new, new) = true;
eq(add(c, x), new) = false;
eq(new, add(c, x)) = false;
eq(add(c, x), add(d, y)) = eq(c, d) and eq(x, y);
ofsort nat
size(new) = 0;
size(add(c, x)) = succ(size(x));
ofsort string
append(new, x) = x;
append(add(c, x), y) = add(c, append(x,y));
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 11 / 28
Types de données abstraits (ADT) Signature
Exemple : ADT chaı̂nes de caractères
Opérations nécessaires :
Chaı̂ne vide (new)
Concaténation de deux chaı̂nes (append)
Concaténation d’un caractère et d’une chaı̂ne (add)
Calcul de la longueur (size)
Test de chaı̂ne vide (isEmpty)
Egalité de chaı̂nes (eq)
Sélection du premier caractère (first)
Types nécessaires pour définir l’ADT :
char : le type caractère
nat : le type entier naturel
bool : le type booléen
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 11 / 28
Types de données abstraits (ADT) Signature
Mathématiques : signature
Algèbre hétérogène (Birkhoff).
Definition (Ensemble S-typé)
Soit S ⊆ S un ensemble fini de sortes. Un ensemble S-typé A est l’union disjointe
d’une famille d’ensembles indexée par S : A =
S
s∈S As

.
Exemple : l’ensemble des valeurs défini par la spécification STRING est un
ensemble S-typé avec S = {bool, char, nat, string}.
Definition (Signature)
Une signature est un couple Σ = hS, Fi, avec S ⊆ S un ensemble fini de sortes et
F = (Fw,s)w∈S∗,s∈S est un ensemble (S∗
× S)-typé de noms d’opérations en F.
Les f ∈ F,s sont appelées des constantes.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 12 / 28
Types de données abstraits (ADT) Termes
Mathématiques : termes
Definition (Termes d’une signature)
Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. L’ensemble
de termes de Σ utilisant les variables de X est un ensemble S-typé TΣ,X avec
chaque ensemble (TΣ,X )s définit inductivement par :
chaque variable x ∈ Xs est un terme de sort s,
chaque constante f ∈ F,s est une terme de sort s,
pour toute opération non constante f ∈ Fw,s avec w = s1 · · · sn et pour tout
n-uple de termes (t1, . . . , tn) tel que ti ∈ (TΣ,X )si
(1 ≤ i ≤ n) alors
f (t1, . . . , tn) est un terme de sort s.
Exemples : append(new, x), x and (y xor z), ...
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 13 / 28
Types de données abstraits (ADT) Axiomes
Mathématiques : axiomes
Definition (Axiome simple)
Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. Les axiomes
sur les variables de X sont des égalités de termes t = t0
tel que t, t0
∈ (TΣ,X )s.
Remarque : les variables de X sont quantifiées universellement.
Exemple : first(add(c, new)) = c ;
Definition (Axiome conditionnelle)
Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. Les axiomes
conditionnelles sur les variables de X sont t0 = t0
0 ∧ . . . tn = t0
n ⇒ t = t0
tel que
t, t0
∈ (TΣ,X )s, t0, t0
0 ∈ (TΣ,X )s0 , . . . , tn, t0
n ∈ (TΣ,X )sn .
Exemple : ajout d’un élément dans un arbre binaire de recherche
lt(d,data(t))=true = add(d,t) = node(add(d,left(t)),data(t),right(t)) ;
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 14 / 28
Types de données abstraits (ADT) Axiomes
Ecriture d’axiomes
Attention : ne pas écrire des axiomes contradictoires ou oublier des cas !
Méthode pour obtenir la complétude et la correction hiérarchique :
Pour chaque opération non-constructeur :
1 écrire une axiome avec la partie gauche un terme qui commence avec le nom
de l’opération ;
2 pour chaque paramètre de l’opération (de gauche à droite) appliquer le
principe suivant :
utiliser une variable pour ce paramètre ;
si une équation est difficile à écrire avec une variable, écrire les équations en
décomposant cette variable à l’aide de constructeurs.
si un constructeur n’est pas suffisant pour écrire l’équation, utiliser les
conditions qui décomposent en cas d’utilisation.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 15 / 28
Types de données abstraits (ADT) Axiomes
Exemple : spécification ADT NATURAL
Equations pour l’opération + : nat, nat - nat :
Décomposition du premier paramètre :
eqns forall x, y : nat
ofsort nat
0 + y = y ;
succ(x) + y = succ(x + y) ;
Que fait-on pour la commutativité : x + y = y + x ;
Exercice : Ecrire les équations pour  : nat, nat - bool
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 16 / 28
Types de données abstraits (ADT) Spécification algébrique
Mathématiques : spécification algébrique
Definition (Spécification algébrique)
Une spécification algébrique multi-sortes Spec = (S, F, X, AX) est une signature
Σ = (S, F) et un ensemble d’axiomes AX sur un ensemble de variables X.
On utilisera aussi la notation Spec = (Σ, X, AX).
La sémantique d’une spécification algébrique est donnée par un modèle,
c’est-à-dire une implémentation possible de la spécification.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 17 / 28
Types de données abstraits (ADT) Spécification algébrique
Mathématiques : spécification algébrique
Definition (Modèle)
Soit Spec = (Σ, X, AX) une spécification algébrique. L’ensemble de ses modèles
Mod(Spec) est l’ensemble de Σ-algèbres M tel que ∀ax ∈ AX, ∀X, M |= ax.
Definition (Σ-algèbre)
Une Σ-algèbre est un couple A = hD, Oi, avec D un ensemble S-typé de valeurs
(D = Ds1
∪ . . . ∪ Dsn
)) et O est un ensemble de fonctions, tel que pour tout nom
d’opération f ∈ Fw,s (w = s1 . . . sn) il existe une fonction f A
∈ O tel que
f A
: Ds1
× . . . × Dsn
→ Ds.
La relation |= utilise :
un morphisme eval : TΣ → M et
une interprétation des variables I : X → M.
Alors M |= t1 = t2 ssi ∀I, eval(t1[I]) = eval(t2[I]).
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 18 / 28
Types de données abstraits (ADT) Spécification incrémentale
Spécification incrémentale
Pour minimiser l’effort d’écriture de spécifications, trois mécanismes sont
disponibles :
1 Importation de spécifications existantes pour re-utilisation de sortes ou
d’opérations.
Ex. : importer BOOLEAN dans NATURAL.
2 Spécification générique (paramétrée) et sa concrétisation.
Ex. : pile d’entiers obtenue à partir d’une pile générique d’éléménts.
3 Héritage et extension d’une spécification.
Ex. : QUEUE est obtenue par héritage de LIST.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 19 / 28
Types de données abstraits (ADT) Spécification incrémentale
Importation de spécifications
Importation multiple par liste de spécifications importées après imports.
Correspond à une union disjointe de spécifications algébriques.
Attention : à la surcharge de noms d’opérations !
Peut amener des problèmes :
d’inconsistance : des classes d’équivalences de termes sont confondues et
d’incomplétude : des classes d’équivalences de termes sont introduites.
Toutefois, il faut utiliser l’importation sans retenue car c’est le moyen le plus
simple pour avoir des spécification modulaires.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 20 / 28
Types de données abstraits (ADT) Spécification incrémentale
Importation et consistance
Definition (Consistance de la composition)
Soient Spec, Spec0
deux spécifications algébriques. Leur composition disjointe
Spec + Spec0
est consistante ssi ∀t1, t2 ∈ TΣ∪Σ0 , ∀M ∈ Mod(Spec), M0
∈
Mod(Spec0
), M00
∈ Mod(Spec + Spec0
), M00
|= t1 = t2 ⇒ M |= t1 = t2.
Exemple : pile de naturels avec les équations :
top(empty) = 0 ;
top(push(n,s)) = n ;
push(n,s) = s ;
permet de démontrer que 0=succ(0), donc tous les naturels seront dans la même
classe d’équivalence !
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 21 / 28
Types de données abstraits (ADT) Spécification incrémentale
Importation et complétude
Definition (Complétude de la composition)
Soient Spec, Spec0
deux spécifications algébriques. Leur composition disjointe
Spec + Spec0
est complète ssi ∀s ∈ S, ∀t ∈ (TΣ∪Σ0 )s, ∃t1 ∈ (TΣ)s tel que
∀M00
∈ Mod(Spec + Spec0
), M00
|= t1 = t.
Exemple : pile de naturels avec l’unique équation :
top(push(n,s))) = n ;
permet d’introduire des classes d’équivalence de termes pour la sort nat, par
exemple top(empty), succ(top(empty)), ... !
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 22 / 28
Types de données abstraits (ADT) Spécification incrémentale
Spécification générique : définition
Par exemple : Arbre binaire de recherche générique.
type BTREE is
imports BOOLEAN
formalsorts elem
formalopns
Undef : - elem
eq, lt : elem, elem - bool
sorts btree
opns
nil : - btree
node : btree, elem, btree - btree
add : elem, btree - btree
left, right : btree - btree
data : btree - elem
isEmpty : btree - bool
isin : elem, btree - bool
eqns
forall t,l,r : btree, d,e : elem
ofsort btree
add(d,nil) = node(nil,d,nil) ;
lt(d,data(t))=true =
add(d,t) = node(add(d,left(t)),data(t),right(t)) ;
lt(d,data(t))=false =
add(d,t) = node(left(t),data(t),add(d,right(t))) ;
left(nil) = nil ;
left(node(l,d,r)) = l ;
right(nil) = nil ;
right(node(l,d,r)) = r ;
data(nil) = Undef ;
data(node(l,d,r)) = d ;
ofsort bool
isEmpty(nil) = true ;
isEmpty(node(l,d,r)) = false ;
isin(nil,e) = false ;
eq(d,e)=true =
isin(node(l,d,r),e) = true ;
lt(e,d)=true =
isin(node(l,d,r),e) = isin(l,e) ;
lt(e,d)=false and eq(e,d)=false =
isin(node(l,d,r),e) = isin(r,e) ;
endtype
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 23 / 28
Types de données abstraits (ADT) Spécification incrémentale
Spécification générique : concrétisation
La concrétisation des formals est faite avec une spécification d’ADT qui contient
des sortes et des opérations (éventuellement renommés) qui satisfont les mêmes
contraintes de profile.
Exemple : Arbre binaire de recherche contenant des naturels.
type BTREE-NAT is BTREE
actualizedby NATURAL using
sortnames nat for elem
btreeNat for btree
opnnames = for eq
 for lt
NaN for Undef
endtype
Une opération formelle n’est pas renommé si l’opération concrète a le même nom !
Le renommage peut concerner les sortes/opérations génériques (voir btreeNat) !
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 24 / 28
Types de données abstraits (ADT) Spécification incrémentale
Rappel : spécification algébrique NATURAL
type NATURAL is
imports BOOLEAN
sorts nat
opns
0 : - nat
succ : nat - nat
NaN : - nat
_+_, _-_ : nat, nat - nat
_*_, _**_ : nat, nat - nat
_eq_, _ne_, _lt_, _le_,
_gt_, _ge_ : nat, nat - bool
_mod_, _div_ : nat, nat - nat
min, max, gcd, scm : nat, nat - nat
eqns
forall x, y : nat
ofsort nat
succ(NaN) = NaN;
0 + x = x;
succ(x) + y = succ(x + y);
NaN + x = NaN;
x + y = y + x;
ofsort nat
x - 0 = x;
0 - succ(y) = NaN;
succ(x) - succ(y) = x - y;
x - NaN = NaN;
NaN - y = NaN;
ofsort nat
0 * y = 0;
succ(x) * y = (x * y) + y;
NaN * y = NaN;
x * y = y * x;
ofsort nat
x ** 0 = succ(0);
x ** succ(y) = x * (x ** y);
x ** NaN = NaN;
NaN ** y = NaN;
ofsort bool
0 eq 0 = true;
0 eq succ(y) = false;
0 eq NaN = false;
succ(x) eq 0 = false;
succ(x) eq succ(y) = x eq y;
succ(x) eq NaN = false;
ofsort bool
0 lt 0 = false;
0 lt succ(y) = true;
(* NaN is a negative integer *)
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 24 / 28
Types de données abstraits (ADT) Spécification incrémentale
0 lt NaN = false;
succ(x) lt 0 = false;
succ(x) lt succ(y) = x lt y;
succ(x) lt NaN = false;
NaN lt y = true;
ofsort bool
x le y = (x lt y) or (x eq y);
ofsort bool
x gt y = not(x le y);
ofsort bool
x ge y = not(x lt y);
ofsort nat
y ne 0, x lt y = x div y = 0;
y ne 0, x ge y =
x div y = 1 + ((x - y) div y);
y eq 0 = x div y = NaN;
NaN div y = NaN;
x div NaN = NaN;
ofsort nat
y ne 0, x lt y = x mod y = x;
y ne 0, x ge y =
x mod y = ((x - y) mod y);
y eq 0 = x mod y = NaN;
NaN mod y = NaN;
x mod NaN = NaN;
ofsort nat
x le y = min (x, y) = x;
x gt y = min (x, y) = y;
ofsort nat
x ge y = max (x, y) = x;
x lt y = max (x, y) = x;
ofsort nat
x eq y, x ne 0 = gcd (x, y) = x;
x lt y, x ne 0 =
gcd (x, y) = gcd (x, x - y);
x gt y, y ne 0 =
gcd (x, y) = gcd (x - y, y);
gcd (x, y) = gcd (y, x);
gcd (NaN, y) = NaN;
ofsort nat
scm (x, y) = (x * y) div gcd (x, y);
endtype
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 25 / 28
Types de données abstraits (ADT) Spécification incrémentale
Spécification héritée : définition
Des sortes, opérations ou équations sont ajoutées à une liste de spécifications.
L’héritage est multiple !
Les même problèmes de consistance et complétude que pour l’importation.
Exemple :
type ABELIAN-GROUP is
extends GROUP
eqns
x . y = y . x
endtype
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 25 / 28
Types de données abstraits (ADT) Exemple projet
Exemple : formalisation des données LIBSYS
Modèle relationel :
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 26 / 28
Types de données abstraits (ADT) Exemple projet
Exemple : formalisation des données LIBSYS
Spécifications ADT :
Standard : BOOLEAN, NATURAL, STRING
Utilitaires : DATE, PAGES, EMAIL, ADDRESS, FILE, LIST
Principales : COUNTRY, AGENCY, SOURCE, ARTICLE, ORDER, BUYER,
AUTHOR
Une partie de ces spécifications sont disponibles sur le site du projet.
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 27 / 28
Types de données abstraits (ADT) Utilisation des ADT
Utilisation des spécifications ADT
Preuve des propriétés des spécifications :
obtenir des nouvelles théorèmes (équations) sur l’ADT.
Ex. : Prouvez que succ(0)+succ(succ(0))=succ(succ(succ(0))).
prouver l’inconsistance = impossibilité à obtenir une implémentation,
prouver l’incomplétude = non déterminisme à résoudre dans l’implémentation,
prouver une relation hiérarchique/d’inclusion entre les spécifications (voir
cours GL),
Obtenir du code correct par construction : si la spécification des opérations
est faite dans un style fonctionnel, du code peut être généré ! Exemple :
caesar.adt de cadp.
nécessite de l’aide du spécificateur (quels sont les constructeurs ?)
certaines parties peuvent être externes pour obtenir l’efficacité
rejet de spécifications correctes
Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 28 / 28

Contenu connexe

Tendances

Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
M2 An 1986 20 3 371 0
M2 An 1986  20 3 371 0M2 An 1986  20 3 371 0
M2 An 1986 20 3 371 0guest8b8369
 
Analyse Numérique – TP
Analyse Numérique – TP Analyse Numérique – TP
Analyse Numérique – TP Mohammed TAMALI
 
Beamer class-example8-ann arbor
Beamer class-example8-ann arborBeamer class-example8-ann arbor
Beamer class-example8-ann arborhamzabd
 
Discrimination et régression pour des dérivées : un résultat de consistance p...
Discrimination et régression pour des dérivées : un résultat de consistance p...Discrimination et régression pour des dérivées : un résultat de consistance p...
Discrimination et régression pour des dérivées : un résultat de consistance p...tuxette
 
Cours econometrie-uqam-st-3-v4
Cours econometrie-uqam-st-3-v4Cours econometrie-uqam-st-3-v4
Cours econometrie-uqam-st-3-v4Arthur Charpentier
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximationWael Ismail
 
Planification séquentielle pour l'estimation de probabilités de défaillance
Planification séquentielle pour l'estimation de probabilités de défaillancePlanification séquentielle pour l'estimation de probabilités de défaillance
Planification séquentielle pour l'estimation de probabilités de défaillanceJulien Bect
 

Tendances (20)

Slides ensae 4
Slides ensae 4Slides ensae 4
Slides ensae 4
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
M2 An 1986 20 3 371 0
M2 An 1986  20 3 371 0M2 An 1986  20 3 371 0
M2 An 1986 20 3 371 0
 
Analyse Numérique – TP
Analyse Numérique – TP Analyse Numérique – TP
Analyse Numérique – TP
 
Slides 2040-4
Slides 2040-4Slides 2040-4
Slides 2040-4
 
Beamer class-example8-ann arbor
Beamer class-example8-ann arborBeamer class-example8-ann arbor
Beamer class-example8-ann arbor
 
Slides 2040-5
Slides 2040-5Slides 2040-5
Slides 2040-5
 
Espacesvec
EspacesvecEspacesvec
Espacesvec
 
Slides 2040-2-0
Slides 2040-2-0Slides 2040-2-0
Slides 2040-2-0
 
Discrimination et régression pour des dérivées : un résultat de consistance p...
Discrimination et régression pour des dérivées : un résultat de consistance p...Discrimination et régression pour des dérivées : un résultat de consistance p...
Discrimination et régression pour des dérivées : un résultat de consistance p...
 
Slides ensae-2016-1
Slides ensae-2016-1Slides ensae-2016-1
Slides ensae-2016-1
 
Cours econometrie-uqam-st-3-v4
Cours econometrie-uqam-st-3-v4Cours econometrie-uqam-st-3-v4
Cours econometrie-uqam-st-3-v4
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Slides 2040-6
Slides 2040-6Slides 2040-6
Slides 2040-6
 
Actuariat et Données
Actuariat et DonnéesActuariat et Données
Actuariat et Données
 
Rappels stats-2014-part2
Rappels stats-2014-part2Rappels stats-2014-part2
Rappels stats-2014-part2
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximation
 
Planification séquentielle pour l'estimation de probabilités de défaillance
Planification séquentielle pour l'estimation de probabilités de défaillancePlanification séquentielle pour l'estimation de probabilités de défaillance
Planification séquentielle pour l'estimation de probabilités de défaillance
 
Slide 2040-1-a2013
Slide 2040-1-a2013Slide 2040-1-a2013
Slide 2040-1-a2013
 

Similaire à C4 spec-adt

cours-5.1.pdf
cours-5.1.pdfcours-5.1.pdf
cours-5.1.pdfGonnaBe1
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeInforMatica34
 
Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Mohammed TAMALI
 
Chap9 : Systèmes non linéaires
Chap9 : Systèmes non linéairesChap9 : Systèmes non linéaires
Chap9 : Systèmes non linéairesMohammed TAMALI
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
analyse_discriminante.pdf
analyse_discriminante.pdfanalyse_discriminante.pdf
analyse_discriminante.pdfSidiAbdallah1
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonGael Varoquaux
 
Mémento caml
Mémento camlMémento caml
Mémento camlzan
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
La programmation par contraintes avec Choco3 (Java)
La programmation par contraintes avec Choco3 (Java)La programmation par contraintes avec Choco3 (Java)
La programmation par contraintes avec Choco3 (Java)Aline Figoureux
 
DataDrill EXPRESS: Les équations dans DataDrill
DataDrill EXPRESS: Les équations dans DataDrill DataDrill EXPRESS: Les équations dans DataDrill
DataDrill EXPRESS: Les équations dans DataDrill Olivier Pinette
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 

Similaire à C4 spec-adt (20)

La méthode z validation
La méthode z validation La méthode z validation
La méthode z validation
 
La méthode z
La méthode zLa méthode z
La méthode z
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
cours-5.1.pdf
cours-5.1.pdfcours-5.1.pdf
cours-5.1.pdf
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)Recherche Opérationnelle - Optimisation (notions de base)
Recherche Opérationnelle - Optimisation (notions de base)
 
Slides 2040-4
Slides 2040-4Slides 2040-4
Slides 2040-4
 
Chap9 : Systèmes non linéaires
Chap9 : Systèmes non linéairesChap9 : Systèmes non linéaires
Chap9 : Systèmes non linéaires
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
analyse_discriminante.pdf
analyse_discriminante.pdfanalyse_discriminante.pdf
analyse_discriminante.pdf
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en Python
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Mémento caml
Mémento camlMémento caml
Mémento caml
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
La programmation par contraintes avec Choco3 (Java)
La programmation par contraintes avec Choco3 (Java)La programmation par contraintes avec Choco3 (Java)
La programmation par contraintes avec Choco3 (Java)
 
DataDrill EXPRESS: Les équations dans DataDrill
DataDrill EXPRESS: Les équations dans DataDrill DataDrill EXPRESS: Les équations dans DataDrill
DataDrill EXPRESS: Les équations dans DataDrill
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Slides ensae-2016-2
Slides ensae-2016-2Slides ensae-2016-2
Slides ensae-2016-2
 

C4 spec-adt

  • 1. Génie logiciel avancé Mihaela Sighireanu UFR d’Informatique Paris Diderot, LIAFA, 175 rue Chevaleret, Bureau 6A7 http://www.liafa.jussieu.fr/∼sighirea/cours/genielog/ Spécification formelle: Types de données abstraits (Adt) Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 1 / 28
  • 2. Résumé 1 Introduction Objectifs Méthodes formelles Spécification formelle 2 Types de données abstraits (ADT) Motivation Signature Termes Axiomes Spécification algébrique Spécification incrémentale Exemple projet Utilisation des ADT Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 2 / 28
  • 3. Introduction Objectifs Objectifs Montrer comment les techniques de spécification formelles aident à découvrir des problèmes dans la spécification du système. Définir et utiliser les techniques algébriques de spécification (ADT) pour spécifier les interfaces. (Cours suivants :) Définir et utiliser des techniques basées sur les modèles pour la spécification des comportements. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 3 / 28
  • 4. Introduction Méthodes formelles Méthodes formelles Les spécifications formelles font partie d’une collection de techniques connues sur le nom de “méthodes formelles”. Les méthodes formelles ont à la base des représentations mathématiques du logiciel ou du matériel. Les méthodes formelles contiennent : Spécifications formelles, Analyse et preuve de spécifications, Développement par raffinement des spécifications, Vérification de programmes. Prévues représenter LA technique de développement, elles sont utilisées que dans des domaines “critiques” à cause de leur coût (matériel, en temps et humain). Le principal bénéfice de leur utilisation est la réduction du nombre d’erreurs dans le logiciel. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 4 / 28
  • 5. Introduction Spécification formelle Processus de spécification et de design Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 5 / 28
  • 6. Introduction Spécification formelle Coût de la spécification formelle La spécification formelle demande plus d’effort dans les phases avant du projet. Elle réduit les erreurs (incomplétude ou inconsistance) de la spécification des charges. Ainsi, le nombre de changements du projet à cause d’un problème de spécification de charges est réduit. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 6 / 28
  • 7. Introduction Spécification formelle Classes de spécifications formelles Algébriques : le système est spécifié en termes d’ensembles, d’opérations et de leur relation. Ex. séquentiel : Act One, Larch, OBJ. Ex. concurrent : Lotos. Basés sur les modèles : le système est spécifié en termes de modèle à états et utilisent des opérations qui changent l’état du sytème. Ex. séquentiel : Z, VDM, B. Ex. concurrent : CSP, réseaux de Pétri, automates hiérarchiques (statecharts). Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 7 / 28
  • 8. Types de données abstraits (ADT) Motivation Motivation Spécification formelle d’interfaces : Les grands systèmes sont décomposés en sous-systèmes qui se composent à travers d’interfaces bien définies. La spécification des interfaces des sous-systèmes permet leur développement independant. Les interfaces peuvent être définies comme des types de données abstraits ou des interfaces de classes. L’approche algébrique pour la spécification formelle des interfaces est souhaitable car elle permet pour les opérations de l’interface : de les définir formellement, d’analyser formellement (preuve) leur comportement, de dériver l’implémentation d’un objet ou d’un type en partant de sa définition formelle. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 8 / 28
  • 9. Types de données abstraits (ADT) Signature Structure d’une spécification d’ADT 4 parties : Introduction : définit la sorte (nom du type) et déclare les autres spécifications utilisées. Description : (optionnelle) décrit de manière informelle les opérations de la sorte. Opérations : définit la syntaxe des opérations dans l’interface et leurs paramètres. Axiomes : définit la sémantique des opérations sous forme d’équations. Spécification (sort + opérations) = signature. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 9 / 28
  • 10. Types de données abstraits (ADT) Signature Exemple : spécification ADT des booléens type BOOLEAN is sorts bool (* Type boolean avec les opérations usuelles *) opns false, true : -> bool not : bool -> bool _and_, _or_, _xor_, _implies_, _iff_, _eq_, _ne_ : bool, bool -> bool eqns forall x, y : bool ofsort bool not (true) = false; not (false) = true; x and true = x; x and false = false; x or true = true; x or false = x; x xor y = (x and not (y)) or (y and not (x)); x implies y = y or not (x); x iff y = (x implies y) and (y implies x); x eq y = x iff y; x ne y = x xor y; endtype Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 10 / 28
  • 11. Types de données abstraits (ADT) Signature Signature Sort : le(s) type(s) à définir. Opérations : plusieurs classes par rapport au type défini constructeur : définit les valeurs du type ; exemples : true, false. inspecteur : renvoie les composantes du type ; exemple : tête de la liste. observateur : décrit la relation (les propriétés) du type avec les autres types ; exemple : longueur liste. Les axiomes doivent définir complètement et correctement les opérations (voir une méthode plus loin). Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 10 / 28
  • 12. Types de données abstraits (ADT) Signature type STRING is imports CHARACTER, NATURAL, BOOLEAN sorts string opns new : -> string append : string, string -> string add : char, string -> string size : string -> nat isEmpty : string -> bool eq : string, string -> bool first : string -> char eqns forall x, y : string, c,d : char ofsort bool isEmpty(new) = true; isEmpty(add (c, x)) = false; eq(new, new) = true; eq(add(c, x), new) = false; eq(new, add(c, x)) = false; eq(add(c, x), add(d, y)) = eq(c, d) and eq(x, y); ofsort nat size(new) = 0; size(add(c, x)) = succ(size(x)); ofsort string append(new, x) = x; append(add(c, x), y) = add(c, append(x,y)); Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 11 / 28
  • 13. Types de données abstraits (ADT) Signature Exemple : ADT chaı̂nes de caractères Opérations nécessaires : Chaı̂ne vide (new) Concaténation de deux chaı̂nes (append) Concaténation d’un caractère et d’une chaı̂ne (add) Calcul de la longueur (size) Test de chaı̂ne vide (isEmpty) Egalité de chaı̂nes (eq) Sélection du premier caractère (first) Types nécessaires pour définir l’ADT : char : le type caractère nat : le type entier naturel bool : le type booléen Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 11 / 28
  • 14. Types de données abstraits (ADT) Signature Mathématiques : signature Algèbre hétérogène (Birkhoff). Definition (Ensemble S-typé) Soit S ⊆ S un ensemble fini de sortes. Un ensemble S-typé A est l’union disjointe d’une famille d’ensembles indexée par S : A = S s∈S As . Exemple : l’ensemble des valeurs défini par la spécification STRING est un ensemble S-typé avec S = {bool, char, nat, string}. Definition (Signature) Une signature est un couple Σ = hS, Fi, avec S ⊆ S un ensemble fini de sortes et F = (Fw,s)w∈S∗,s∈S est un ensemble (S∗ × S)-typé de noms d’opérations en F. Les f ∈ F,s sont appelées des constantes. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 12 / 28
  • 15. Types de données abstraits (ADT) Termes Mathématiques : termes Definition (Termes d’une signature) Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. L’ensemble de termes de Σ utilisant les variables de X est un ensemble S-typé TΣ,X avec chaque ensemble (TΣ,X )s définit inductivement par : chaque variable x ∈ Xs est un terme de sort s, chaque constante f ∈ F,s est une terme de sort s, pour toute opération non constante f ∈ Fw,s avec w = s1 · · · sn et pour tout n-uple de termes (t1, . . . , tn) tel que ti ∈ (TΣ,X )si (1 ≤ i ≤ n) alors f (t1, . . . , tn) est un terme de sort s. Exemples : append(new, x), x and (y xor z), ... Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 13 / 28
  • 16. Types de données abstraits (ADT) Axiomes Mathématiques : axiomes Definition (Axiome simple) Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. Les axiomes sur les variables de X sont des égalités de termes t = t0 tel que t, t0 ∈ (TΣ,X )s. Remarque : les variables de X sont quantifiées universellement. Exemple : first(add(c, new)) = c ; Definition (Axiome conditionnelle) Soit Σ = hS, Fi une signature et X un ensemble S-typé de variables. Les axiomes conditionnelles sur les variables de X sont t0 = t0 0 ∧ . . . tn = t0 n ⇒ t = t0 tel que t, t0 ∈ (TΣ,X )s, t0, t0 0 ∈ (TΣ,X )s0 , . . . , tn, t0 n ∈ (TΣ,X )sn . Exemple : ajout d’un élément dans un arbre binaire de recherche lt(d,data(t))=true = add(d,t) = node(add(d,left(t)),data(t),right(t)) ; Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 14 / 28
  • 17. Types de données abstraits (ADT) Axiomes Ecriture d’axiomes Attention : ne pas écrire des axiomes contradictoires ou oublier des cas ! Méthode pour obtenir la complétude et la correction hiérarchique : Pour chaque opération non-constructeur : 1 écrire une axiome avec la partie gauche un terme qui commence avec le nom de l’opération ; 2 pour chaque paramètre de l’opération (de gauche à droite) appliquer le principe suivant : utiliser une variable pour ce paramètre ; si une équation est difficile à écrire avec une variable, écrire les équations en décomposant cette variable à l’aide de constructeurs. si un constructeur n’est pas suffisant pour écrire l’équation, utiliser les conditions qui décomposent en cas d’utilisation. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 15 / 28
  • 18. Types de données abstraits (ADT) Axiomes Exemple : spécification ADT NATURAL Equations pour l’opération + : nat, nat - nat : Décomposition du premier paramètre : eqns forall x, y : nat ofsort nat 0 + y = y ; succ(x) + y = succ(x + y) ; Que fait-on pour la commutativité : x + y = y + x ; Exercice : Ecrire les équations pour : nat, nat - bool Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 16 / 28
  • 19. Types de données abstraits (ADT) Spécification algébrique Mathématiques : spécification algébrique Definition (Spécification algébrique) Une spécification algébrique multi-sortes Spec = (S, F, X, AX) est une signature Σ = (S, F) et un ensemble d’axiomes AX sur un ensemble de variables X. On utilisera aussi la notation Spec = (Σ, X, AX). La sémantique d’une spécification algébrique est donnée par un modèle, c’est-à-dire une implémentation possible de la spécification. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 17 / 28
  • 20. Types de données abstraits (ADT) Spécification algébrique Mathématiques : spécification algébrique Definition (Modèle) Soit Spec = (Σ, X, AX) une spécification algébrique. L’ensemble de ses modèles Mod(Spec) est l’ensemble de Σ-algèbres M tel que ∀ax ∈ AX, ∀X, M |= ax. Definition (Σ-algèbre) Une Σ-algèbre est un couple A = hD, Oi, avec D un ensemble S-typé de valeurs (D = Ds1 ∪ . . . ∪ Dsn )) et O est un ensemble de fonctions, tel que pour tout nom d’opération f ∈ Fw,s (w = s1 . . . sn) il existe une fonction f A ∈ O tel que f A : Ds1 × . . . × Dsn → Ds. La relation |= utilise : un morphisme eval : TΣ → M et une interprétation des variables I : X → M. Alors M |= t1 = t2 ssi ∀I, eval(t1[I]) = eval(t2[I]). Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 18 / 28
  • 21. Types de données abstraits (ADT) Spécification incrémentale Spécification incrémentale Pour minimiser l’effort d’écriture de spécifications, trois mécanismes sont disponibles : 1 Importation de spécifications existantes pour re-utilisation de sortes ou d’opérations. Ex. : importer BOOLEAN dans NATURAL. 2 Spécification générique (paramétrée) et sa concrétisation. Ex. : pile d’entiers obtenue à partir d’une pile générique d’éléménts. 3 Héritage et extension d’une spécification. Ex. : QUEUE est obtenue par héritage de LIST. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 19 / 28
  • 22. Types de données abstraits (ADT) Spécification incrémentale Importation de spécifications Importation multiple par liste de spécifications importées après imports. Correspond à une union disjointe de spécifications algébriques. Attention : à la surcharge de noms d’opérations ! Peut amener des problèmes : d’inconsistance : des classes d’équivalences de termes sont confondues et d’incomplétude : des classes d’équivalences de termes sont introduites. Toutefois, il faut utiliser l’importation sans retenue car c’est le moyen le plus simple pour avoir des spécification modulaires. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 20 / 28
  • 23. Types de données abstraits (ADT) Spécification incrémentale Importation et consistance Definition (Consistance de la composition) Soient Spec, Spec0 deux spécifications algébriques. Leur composition disjointe Spec + Spec0 est consistante ssi ∀t1, t2 ∈ TΣ∪Σ0 , ∀M ∈ Mod(Spec), M0 ∈ Mod(Spec0 ), M00 ∈ Mod(Spec + Spec0 ), M00 |= t1 = t2 ⇒ M |= t1 = t2. Exemple : pile de naturels avec les équations : top(empty) = 0 ; top(push(n,s)) = n ; push(n,s) = s ; permet de démontrer que 0=succ(0), donc tous les naturels seront dans la même classe d’équivalence ! Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 21 / 28
  • 24. Types de données abstraits (ADT) Spécification incrémentale Importation et complétude Definition (Complétude de la composition) Soient Spec, Spec0 deux spécifications algébriques. Leur composition disjointe Spec + Spec0 est complète ssi ∀s ∈ S, ∀t ∈ (TΣ∪Σ0 )s, ∃t1 ∈ (TΣ)s tel que ∀M00 ∈ Mod(Spec + Spec0 ), M00 |= t1 = t. Exemple : pile de naturels avec l’unique équation : top(push(n,s))) = n ; permet d’introduire des classes d’équivalence de termes pour la sort nat, par exemple top(empty), succ(top(empty)), ... ! Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 22 / 28
  • 25. Types de données abstraits (ADT) Spécification incrémentale Spécification générique : définition Par exemple : Arbre binaire de recherche générique. type BTREE is imports BOOLEAN formalsorts elem formalopns Undef : - elem eq, lt : elem, elem - bool sorts btree opns nil : - btree node : btree, elem, btree - btree add : elem, btree - btree left, right : btree - btree data : btree - elem isEmpty : btree - bool isin : elem, btree - bool eqns forall t,l,r : btree, d,e : elem ofsort btree add(d,nil) = node(nil,d,nil) ; lt(d,data(t))=true = add(d,t) = node(add(d,left(t)),data(t),right(t)) ; lt(d,data(t))=false = add(d,t) = node(left(t),data(t),add(d,right(t))) ; left(nil) = nil ; left(node(l,d,r)) = l ; right(nil) = nil ; right(node(l,d,r)) = r ; data(nil) = Undef ; data(node(l,d,r)) = d ; ofsort bool isEmpty(nil) = true ; isEmpty(node(l,d,r)) = false ; isin(nil,e) = false ; eq(d,e)=true = isin(node(l,d,r),e) = true ; lt(e,d)=true = isin(node(l,d,r),e) = isin(l,e) ; lt(e,d)=false and eq(e,d)=false = isin(node(l,d,r),e) = isin(r,e) ; endtype Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 23 / 28
  • 26. Types de données abstraits (ADT) Spécification incrémentale Spécification générique : concrétisation La concrétisation des formals est faite avec une spécification d’ADT qui contient des sortes et des opérations (éventuellement renommés) qui satisfont les mêmes contraintes de profile. Exemple : Arbre binaire de recherche contenant des naturels. type BTREE-NAT is BTREE actualizedby NATURAL using sortnames nat for elem btreeNat for btree opnnames = for eq for lt NaN for Undef endtype Une opération formelle n’est pas renommé si l’opération concrète a le même nom ! Le renommage peut concerner les sortes/opérations génériques (voir btreeNat) ! Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 24 / 28
  • 27. Types de données abstraits (ADT) Spécification incrémentale Rappel : spécification algébrique NATURAL type NATURAL is imports BOOLEAN sorts nat opns 0 : - nat succ : nat - nat NaN : - nat _+_, _-_ : nat, nat - nat _*_, _**_ : nat, nat - nat _eq_, _ne_, _lt_, _le_, _gt_, _ge_ : nat, nat - bool _mod_, _div_ : nat, nat - nat min, max, gcd, scm : nat, nat - nat eqns forall x, y : nat ofsort nat succ(NaN) = NaN; 0 + x = x; succ(x) + y = succ(x + y); NaN + x = NaN; x + y = y + x; ofsort nat x - 0 = x; 0 - succ(y) = NaN; succ(x) - succ(y) = x - y; x - NaN = NaN; NaN - y = NaN; ofsort nat 0 * y = 0; succ(x) * y = (x * y) + y; NaN * y = NaN; x * y = y * x; ofsort nat x ** 0 = succ(0); x ** succ(y) = x * (x ** y); x ** NaN = NaN; NaN ** y = NaN; ofsort bool 0 eq 0 = true; 0 eq succ(y) = false; 0 eq NaN = false; succ(x) eq 0 = false; succ(x) eq succ(y) = x eq y; succ(x) eq NaN = false; ofsort bool 0 lt 0 = false; 0 lt succ(y) = true; (* NaN is a negative integer *) Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 24 / 28
  • 28. Types de données abstraits (ADT) Spécification incrémentale 0 lt NaN = false; succ(x) lt 0 = false; succ(x) lt succ(y) = x lt y; succ(x) lt NaN = false; NaN lt y = true; ofsort bool x le y = (x lt y) or (x eq y); ofsort bool x gt y = not(x le y); ofsort bool x ge y = not(x lt y); ofsort nat y ne 0, x lt y = x div y = 0; y ne 0, x ge y = x div y = 1 + ((x - y) div y); y eq 0 = x div y = NaN; NaN div y = NaN; x div NaN = NaN; ofsort nat y ne 0, x lt y = x mod y = x; y ne 0, x ge y = x mod y = ((x - y) mod y); y eq 0 = x mod y = NaN; NaN mod y = NaN; x mod NaN = NaN; ofsort nat x le y = min (x, y) = x; x gt y = min (x, y) = y; ofsort nat x ge y = max (x, y) = x; x lt y = max (x, y) = x; ofsort nat x eq y, x ne 0 = gcd (x, y) = x; x lt y, x ne 0 = gcd (x, y) = gcd (x, x - y); x gt y, y ne 0 = gcd (x, y) = gcd (x - y, y); gcd (x, y) = gcd (y, x); gcd (NaN, y) = NaN; ofsort nat scm (x, y) = (x * y) div gcd (x, y); endtype Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 25 / 28
  • 29. Types de données abstraits (ADT) Spécification incrémentale Spécification héritée : définition Des sortes, opérations ou équations sont ajoutées à une liste de spécifications. L’héritage est multiple ! Les même problèmes de consistance et complétude que pour l’importation. Exemple : type ABELIAN-GROUP is extends GROUP eqns x . y = y . x endtype Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 25 / 28
  • 30. Types de données abstraits (ADT) Exemple projet Exemple : formalisation des données LIBSYS Modèle relationel : Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 26 / 28
  • 31. Types de données abstraits (ADT) Exemple projet Exemple : formalisation des données LIBSYS Spécifications ADT : Standard : BOOLEAN, NATURAL, STRING Utilitaires : DATE, PAGES, EMAIL, ADDRESS, FILE, LIST Principales : COUNTRY, AGENCY, SOURCE, ARTICLE, ORDER, BUYER, AUTHOR Une partie de ces spécifications sont disponibles sur le site du projet. Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 27 / 28
  • 32. Types de données abstraits (ADT) Utilisation des ADT Utilisation des spécifications ADT Preuve des propriétés des spécifications : obtenir des nouvelles théorèmes (équations) sur l’ADT. Ex. : Prouvez que succ(0)+succ(succ(0))=succ(succ(succ(0))). prouver l’inconsistance = impossibilité à obtenir une implémentation, prouver l’incomplétude = non déterminisme à résoudre dans l’implémentation, prouver une relation hiérarchique/d’inclusion entre les spécifications (voir cours GL), Obtenir du code correct par construction : si la spécification des opérations est faite dans un style fonctionnel, du code peut être généré ! Exemple : caesar.adt de cadp. nécessite de l’aide du spécificateur (quels sont les constructeurs ?) certaines parties peuvent être externes pour obtenir l’efficacité rejet de spécifications correctes Mihaela Sighireanu (UFR Info P7) GLA Cours 4: ADT 28 / 28