“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 145 — #155
i
i
i
i
i
i
i
i
3.5 Les types de données abstraits
145
Il y a un nouveau type de base qui s’appelle un nom ou une valeur de nom. Un nom
est une constante semblable à un atome sauf qu’il a un jeu d’opérations plus restreint.
En particulier, les noms n’ont pas de représentation textuelle : ils ne peuvent pas être
imprimés ou tapés sur un clavier. À la différence des atomes, il n’est pas possible de
convertir entre noms et chaînes de caractères. La seule manière de connaître un nom
est que quelqu’un passe une référence au nom à l’intérieur du programme. Le type du
nom a deux opérations :
Opération
Description
{NewName} Renvoyez un nouveau nom
N1==N2
Comparez les noms N1 et N2
Un nouveau nom est différent de tous les autres noms dans le système. Le lecteur
attentif remarquera que NewName n’est pas déclaratif parce que l’appeler deux fois
donne des résultats différents. La création de nouveaux noms est une opération à état.
La garantie du caractère unique de chaque nouveau nom implique que NewName ait
une mémoire interne. Quoi qu’il en soit, si nous utilisons NewName uniquement pour
sécuriser des ADT déclaratifs, ce ne sera pas un problème. L’ADT sécurisé qui en
résulte sera toujours déclaratif.
3.5.3 La création d’un type abstrait sécurisé
Pour sécuriser un type de données, il suffit de le mettre à l’intérieur d’une structure de
données protégée par un nom. Par exemple, prenez la valeur S :
S=[a b c]
S est un état interne de la pile que nous avons définie auparavant. Nous pouvons le
sécuriser comme ceci :
Key={NewName}
SS={Chunk.new w(Key:S)}
Nous créons d’abord un nouveau nom dans Key. Ensuite nous créons un « chunk »
SS qui contient S, de telle manière que l’on peut extraire S seulement si on connaît
Key. Un chunk est un enregistrement restreint qui n’a qu’une opération, l’opérateur de
sélection « . » (voir la documentation de Mozart [23]). Nous disons que nous avons
« emballé » la valeur S dans SS. Si on connaît Key, il est facile de retrouver S à partir
de SS :
S=try SS.Key
catch _ then raise error(unwrap(SS)) end end
Nous disons que cela « déballe » la valeur S de l’emballage SS. Si on ne connaît pas
Key, le déballage sera impossible. Il n’y a aucune manière de connaître Key sauf si
© Dunod – La photocopie non autorisée est un délit
Précédent

- 160/370

Suivant