“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 237 — #247
i
i
i
i
i
i
i
i
5.4 L’abstraction de données
237
par la portée lexicale. Cet enregistrement représente l’objet et ses champs sont les
méthodes. C’est très différent de la version déclarative non agrégée, où l’enregistrement représente un module et ses champs sont les opérations ADT. Voici un exemple
d’utilisation :
declare S1 S2 S3 E in
S1={NewStack}
{Browse {S1.isEmpty}}
S2={S1.push 23}
S3={S2.pop E}
{Browse E}
Cette version étant à la fois agrégée et sécurisée, nous pouvons la considérer comme
une forme déclarative de la programmation orientée objet. La pile S1 est un objet
déclaratif.
La pile sécurisée agrégée avec état
Utilisons maintenant l’état pour construire la pile. L’appel NewStack crée un nouvel
objet pile :
fun {NewStack}
C={NewCell nil}
proc {Push E} C:=E|@C end
fun {Pop} case @C of X|S1 then C:=S1 X end end
fun {IsEmpty} @C==nil end
in
stack(push:Push pop:Pop isEmpty:IsEmpty)
end
Cette version est sécurisée, agrégée et avec état. Cela s’appelle généralement un objet.
Comme la version déclarative agrégée, l’objet est représenté par un enregistrement
de valeurs procédurales. Cette version offre la fonctionnalité de la programmation
orientée objet, à savoir un ensemble d’opérations (« méthodes ») avec un état caché à
l’intérieur. Le résultat de l’appel de NewStack est une instance d’objet avec les trois
méthodes push, pop et isEmpty.
La pile sécurisée agrégée avec état (envoi procédural)
Voici encore une autre manière d’implémenter une pile sécurisée agrégée avec état. Elle
utilise une instruction case à l’intérieur d’une procédure au lieu d’un enregistrement :
© Dunod – La photocopie non autorisée est un délit
Précédent

- 252/370

Suivant