“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 264 — #274
i
i
i
i
i
i
i
i
264
5
• La programmation avec état explicite
declare S1 X Y in
S=access(X)|assign(3)|access(Y)|S1
X est liée à 0 (le contenu initial), 3 est mis dans le conteneur, et enfin Y est
liée à 3.
b) Maintenant, réécrivez SumList pour utiliser ce conteneur pour compter le
nombre d’appels. Le conteneur peut-il être encapsulé, c’est-à-dire peut-on
l’ajouter sans changer les arguments de SumList ? Pourquoi oui ou pourquoi
non ? Que se passe-t-il quand nous essayons d’ajouter la fonction SumCount
comme dans la section 5.1.2 ?
➤ Exercice 4 — L’état explicite et la sécurité
La section 5.4 montre quatre manières de construire des abstractions de données
sécurisées. D’après ces constructions, il semble que la capacité de sécuriser
des abstractions est une conséquence de l’utilisation d’un ou plusieurs des trois
concepts suivants : les valeurs procédurales (qui permettent l’encapsulation avec
la portée lexicale), les noms (qui sont infalsifiables et que l’on ne peut pas
deviner) et les chunks (qui permettent un accès sélectif). En particulier, l’état
explicite ne semble pas jouer un rôle par rapport à la sécurité. Pour cet exercice,
réfléchissez bien sur cette assertion. Est-elle vraie ? Pourquoi oui ou pourquoi
non ?
➤ Exercice 5 — Les objets déclaratifs et l’identité
La section 5.4.2 montre comment construire un objet déclaratif qui combine
les valeurs et les opérations de manière sécurisée. Pourtant, l’implémentation
manque un aspect des objets, à savoir leur identité. Un objet doit garder la
même identité après les changements d’état. Pour cet exercice, étendez les objets
déclaratifs de la section 5.4.2 pour avoir une identité.
➤ Exercice 6 — Les abstractions et la gestion de mémoire
Considérez l’ADT avec état suivant qui permet de collectionner des informations
en une liste. L’ADT a trois opérations. L’appel C={NewCollector} crée
un nouveau collecteur C. L’appel {Collect C X} ajoute X à la collection
de C. L’appel L={EndCollect C} renvoie la liste finale qui contient tous
les éléments collectionnés dans l’ordre de leur collection. Voici deux manières
d’implémenter les collecteurs que nous comparerons :
– C est une cellule qui contient une paire H|T, où H est la tête de la liste
collectionnée et T est sa queue non liée. Collect est implémentée ainsi :
proc {Collect C X}
H T in
{Exchange C H|(X|T) H|T}
end
i
i
i
i
i
i
i
i
264
5
• La programmation avec état explicite
declare S1 X Y in
S=access(X)|assign(3)|access(Y)|S1
X est liée à 0 (le contenu initial), 3 est mis dans le conteneur, et enfin Y est
liée à 3.
b) Maintenant, réécrivez SumList pour utiliser ce conteneur pour compter le
nombre d’appels. Le conteneur peut-il être encapsulé, c’est-à-dire peut-on
l’ajouter sans changer les arguments de SumList ? Pourquoi oui ou pourquoi
non ? Que se passe-t-il quand nous essayons d’ajouter la fonction SumCount
comme dans la section 5.1.2 ?
➤ Exercice 4 — L’état explicite et la sécurité
La section 5.4 montre quatre manières de construire des abstractions de données
sécurisées. D’après ces constructions, il semble que la capacité de sécuriser
des abstractions est une conséquence de l’utilisation d’un ou plusieurs des trois
concepts suivants : les valeurs procédurales (qui permettent l’encapsulation avec
la portée lexicale), les noms (qui sont infalsifiables et que l’on ne peut pas
deviner) et les chunks (qui permettent un accès sélectif). En particulier, l’état
explicite ne semble pas jouer un rôle par rapport à la sécurité. Pour cet exercice,
réfléchissez bien sur cette assertion. Est-elle vraie ? Pourquoi oui ou pourquoi
non ?
➤ Exercice 5 — Les objets déclaratifs et l’identité
La section 5.4.2 montre comment construire un objet déclaratif qui combine
les valeurs et les opérations de manière sécurisée. Pourtant, l’implémentation
manque un aspect des objets, à savoir leur identité. Un objet doit garder la
même identité après les changements d’état. Pour cet exercice, étendez les objets
déclaratifs de la section 5.4.2 pour avoir une identité.
➤ Exercice 6 — Les abstractions et la gestion de mémoire
Considérez l’ADT avec état suivant qui permet de collectionner des informations
en une liste. L’ADT a trois opérations. L’appel C={NewCollector} crée
un nouveau collecteur C. L’appel {Collect C X} ajoute X à la collection
de C. L’appel L={EndCollect C} renvoie la liste finale qui contient tous
les éléments collectionnés dans l’ordre de leur collection. Voici deux manières
d’implémenter les collecteurs que nous comparerons :
– C est une cellule qui contient une paire H|T, où H est la tête de la liste
collectionnée et T est sa queue non liée. Collect est implémentée ainsi :
proc {Collect C X}
H T in
{Exchange C H|(X|T) H|T}
end
