“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 245 — #255
i
i
i
i
i
i
i
i
5.5 Le polymorphisme
245
Voici une exécution :
C={Collection.new}
{Collection.put C 1}
{Collection.put C 2}
{Browse {Collection.get C}}
{Browse {Collection.get C}}
Maintenant, implémentons la collection comme un objet avec la pile avec état agrégée :
fun {NewCollection}
S={NewStack}
proc {Put X} {S.push X} end
fun {Get} {S.pop} end
fun {IsEmpty} {S.isEmpty} end
in
collection(put:Put get:Get isEmpty:IsEmpty)
end
Voici une exécution, qui fait les mêmes choses qu’avec l’ADT :
C={NewCollection}
{C.put 1}
{C.put 2}
{Browse {C.get}}
{Browse {C.get}}
5.5.2 Ajouter une opération union dans le cas ADT
Nous voulons étendre le type Collection avec une opération union qui prend tous les
éléments d’une collection et les ajoute à une autre collection. Dans le style ADT on
l’appelle comme {Collection.union C1 C2}, ce qui ajoute tous les éléments
de C2 dans C1, ce qui laisse C2 vide. Pour implémenter union, nous utilisons une
abstraction de contrôle :
proc {DoUntil BF S}
if {BF} then skip else {S} {DoUntil BF S} end
end
DoUntil exécute {S} aussi longtemps que {BF} renvoie false. Avec DoUntil,
nous implémentons le nouveau type Collection comme une extension de l’implémentation originale :
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
5.5 Le polymorphisme
245
Voici une exécution :
C={Collection.new}
{Collection.put C 1}
{Collection.put C 2}
{Browse {Collection.get C}}
{Browse {Collection.get C}}
Maintenant, implémentons la collection comme un objet avec la pile avec état agrégée :
fun {NewCollection}
S={NewStack}
proc {Put X} {S.push X} end
fun {Get} {S.pop} end
fun {IsEmpty} {S.isEmpty} end
in
collection(put:Put get:Get isEmpty:IsEmpty)
end
Voici une exécution, qui fait les mêmes choses qu’avec l’ADT :
C={NewCollection}
{C.put 1}
{C.put 2}
{Browse {C.get}}
{Browse {C.get}}
5.5.2 Ajouter une opération union dans le cas ADT
Nous voulons étendre le type Collection avec une opération union qui prend tous les
éléments d’une collection et les ajoute à une autre collection. Dans le style ADT on
l’appelle comme {Collection.union C1 C2}, ce qui ajoute tous les éléments
de C2 dans C1, ce qui laisse C2 vide. Pour implémenter union, nous utilisons une
abstraction de contrôle :
proc {DoUntil BF S}
if {BF} then skip else {S} {DoUntil BF S} end
end
DoUntil exécute {S} aussi longtemps que {BF} renvoie false. Avec DoUntil,
nous implémentons le nouveau type Collection comme une extension de l’implémentation originale :
© Dunod – La photocopie non autorisée est un délit
