Types Abstraits de Données

Transcription

Types Abstraits de Données
Types Abstraits de Données
Types Abstraits de Données
• Processus de conception en plusieurs
étapes :
spécification des structures de données
utilisées
conception des algorithmes opérant sur ces
données
vérification de leurs propriétés
implantation en machine, représentation
physique des structures de données
Introduction
• Pour les trois premières étapes :
on souhaite ne pas s’encombrer de détails ni
de contraintes secondaires
les données sont définies sous forme abstraite
utilisation de Types Abstraits de Données (TAD)
• Il s’agit de savoir :
quelles sont les opérations sur les données
quelles sont les propriétés intrinsèques de ces
opérations
• Mais pas :
comment ces opérations sont réalisées
• Ex. : nombres et opérations arithmétiques
Types Abstraits de Données
Types Abstraits de Données
Un cahier des charges…
Notion de signature
• Définit
• …entre :
le concepteur (qui imagine la SD)
le programmeur (qui implante la SD)
l’utilisateur (qui manipule la SD pour concevoir
ses propres algos)
Types Abstraits de Données
Exemple : TAD booléen
type booléen
opérations
vrai : → booléen
faux : → booléen
¬_
: booléen → booléen
_∧_ : booléen x booléen → booléen
_∨_ : booléen x booléen → booléen
la syntaxe du type
les opérations associées au type
sans en définir les propriétés (sémantique)
• Comporte la définition
du nom du type
du nom des opérations + type des arguments
éventuels et du résultat
Types Abstraits de Données
Le symbole :
type booléen
opérations
vrai : → booléen
faux : → booléen
¬_
: booléen → booléen
_∧_ : booléen x booléen → booléen
_∨_ : booléen x booléen → booléen
• la partie gauche indique le nom de
l’opération et la place des arguments
• la partie droite indique les types des
arguments et du résultat
1
Types Abstraits de Données
Le symbole _
type booléen
opérations
vrai : → booléen
faux : → booléen
¬_
: booléen → booléen
_∧_ : booléen x booléen → booléen
_∨_ : booléen x booléen → booléen
• signale la place d’un argument
Types Abstraits de Données
Le symbole →
type booléen
opérations
vrai : → booléen
faux : → booléen
¬_
: booléen → booléen
_∧_ : booléen x booléen → booléen
_∨_ : booléen x booléen → booléen
• la partie gauche indique les types des
arguments (séparés par des x)
• la partie droite indique le type du résultat
Types Abstraits de Données
Types Abstraits de Données
Sémantique
Exemple : TAD booléen
• la signature du type
ne donne que des infos syntaxiques
ne renseigne pas sur les propriétés du type
• Le paragraphe sémantique précise les
propriétés des opérations sous forme d’un
ensemble d’axiomes
propriétés « initiales » que les opérations
doivent vérifier sans qu’il soit nécessaire de les
démontrer
possible de démontrer des propriétés
supplémentaires par raisonnement
type booléen
opérations
vrai : → booléen
faux : → booléen
¬_
: booléen → booléen
_∧_ : booléen x booléen → booléen
_∨_ : booléen x booléen → booléen
sémantique
pour tout a, b : booléen
1.
2.
3.
4.
5.
¬ vrai = faux
¬ ¬ a = a
vrai ∧ a = a
faux ∧ a = faux
a ∨ b = ¬ ( ¬ a ∧ ¬ b )
Types Abstraits de Données
Types Abstraits de Données
Nouvelles propriétés
Hiérarchie des types (1)
• ¬faux = vrai
¬faux = ¬(¬vrai) = vrai (1 puis 2)
• faux ∨ b = b
faux ∨ b = ¬(¬faux ∧ ¬b) = ¬(vrai ∧ ¬b) = ¬¬b
= b {5, 6, 3, 2}
• vrai ∨ b = vrai
vrai ∨ b = ¬(¬vrai ∧ ¬b) = ¬(faux ∧ ¬b) = ¬faux
= vrai {5, 1, 4, 6}
• Le type booléen ne fait référence à
aucun autre type que lui-même
• Pour un tableau à une dimension de
nombre réels, on a besoin :
du type entier pour les bornes et les indices
du type réel pour les éléments du tableau
• on souhaitera faire référence à des types
prédéfinis, sans avoir à les redéfinir
complètement → on utilise ces types
2
Types Abstraits de Données
Types Abstraits de Données
Hiérarchie des types (2)
Exemple : une table (1)
• on a besoin des propriétés du type
entier pour manipuler les éléments du
tableau
• on n’a pas besoin des propriétés du type
réel
puisqu’on peut le remplacer par n’importe
quel type, ça ne change pas les propriétés du
tableau
c’est un paramètre du tableau
• Définition :
Une table est une structure de conservation
d’une quantité fixe d’informations. Les
informations sont identifiées par un numéro
appartenant à un intervalle donné. Elle
permet de retrouver une information
préalablement mémorisée à partir de son
numéro
Types Abstraits de Données
Types Abstraits de Données
Exemple : une table (2)
Exemple : une table (3)
• Création d’une table
• Ajout d’un élément à la table
Pré :
Pré :
• i = indice du premier élément
• j = indice du dernier élément
Post :
• table contenant des informations référencées par
l’intervalle [bi..bs]
• <[bi..bs]→ ?>, une table
• i, un indice
• e, un élément
Post :
• Table contenant l’élément e en i ème position
tab
i, j ⇒〈[bi ..bs ] → ?〉
〈[bi ..bs ] → ?〉, i, e
changer −ième
⇒
〈[bi ..bs ] → ?, i → e〉
Types Abstraits de Données
Types Abstraits de Données
Exemple : une table (4)
TAD table (1)
• Accéder au ième élément d’un tableau
Pré :
• <[bi..bs]→ ?, i→e>, une table
• i, un indice
Post :
• Le i ème élément de la table
ième
〈[bi ..bs ] → ?, i → e〉, i ⇒ e
type table
paramètre élément
utilise entier, booléen
opérations
tab
: entier x entier → table
ième
: table x entier → élément
changer-ième : table x entier x élément → table
borneinf
: table → entier
bornesup
: table → entier
défini
: table x entier → booléen
préconditions
ième(t,k)
: défini(t,k)
changer-ième(t,k,e) : borneinf(t) ≤ k < bornesup(t)
3
Types Abstraits de Données
Types Abstraits de Données
TAD table (2)
Opérations
sémantique
ième(t, j) =
soit t = changer-ième(t’, i, e)
si j = i alors e sinon ième(t’, j) fsi
bornesup(t) =
si t = tab(i, j) alors j
sinon soit t = changer-ième(t’, k, e)
bornesup(t’)
fsi
borneinf(t) = ... idem bornesup
défini(t, k) =
si t = tab(i, j) alors faux
sinon soit t = changer-ième(t’, i, e)
si k = i alors vrai
sinon défini(t’, k)
fsi
fsi
• Opérations internes
Opèrent sur la table elle-même
Opérations de construction
• T apparaît comme résultat, pas comme argument
• ex: tab
Opérations de transformation
• Modification de T passé en argument
• ex: changer-ième
• Opérations externes (observateurs)
Ne modifient pas le contenu de la table T
Opérations d’accès
• ex: ième, bornesup, défini
Types Abstraits de Données
Exemple d’implantation
typedef struct {
element **tab;
int bs;
} table;
table *tab(int s) {
table *t = (table *)(malloc(sizeof(table));
t->bs = s;
t->tab = (element **)(malloc(bs * sizeof(element*));
for (int i=0; i<bs; i++)
t->tab[i] = null;
return t;
}
table *changer_ième(table *t, int i, element *e) {
if ((i>=0) && (i<t->bs))
t->tab[i] = e;
return t;
}
element *ième(table *t, int i) {
if ((i>=0) && (i<t->bs))
return t->tab[i];
}
4

Documents pareils