“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 235 — #245
i
i
i
i
i
i
i
i
5.4 L’abstraction de données
235
procédures Pop. Deux des procédures Pop (la deuxième et la troisième) emballent
les données elles-mêmes avec la portée lexicale.
Avec état et non agrégée
Avec état et agrégée
Pop
[a b c]
Pop
[b c]
E=a
Pop
[b c]
S1
S [a b c]
S
E=a
S1
[b c]
[a b c]
C
E=a
Pop
E=a
[a b c]
[b c]
C
Pop
S
S
S1={Stack.pop S E}
S1={S.pop E}
E={S.pop}
E={Stack.pop S}
(avant)
(après)
(avant)
(après)
Déclarative et non agrégée Déclarative et agrégée
Figure 5.3 Quatre versions sécurisées d’une pile.
La pile ouverte déclarative
Définissons d’abord la fonctionnalité de la pile avec une définition simple :
declare
local
fun {NewStack} nil end
fun {Push S E} E|S end
fun {Pop S ?E} case S of X|S1 then E=X S1 end end
fun {IsEmpty S} S==nil end
in
Stack=stack(new:NewStack push:Push
pop:Pop isEmpty:IsEmpty)
end
Stack est un module qui regroupe les opérations de pile.
3 Cette version est ouverte,
déclarative et non agrégée.
3. Remarquez que Stack est une variable globale qui a besoin de declare, même si elle est à
l’intérieur de l’instruction local.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 250/370

Suivant