“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 223 — #233
i
i
i
i
i
i
i
i
5.1 L’état c’est quoi ?
223
Cette séquence est un état. Vu de cette façon, SumList calcule avec un état. Mais
ni le programme ni le modèle de calcul « savent » cela. L’état est complètement dans
l’esprit du programmeur.
5.1.2 L’état explicite
Il peut être utile pour une fonction d’avoir un état qui survit au-delà des appels de la
fonction et qui est caché des appelants. Par exemple, nous pouvons étendre SumList
pour compter le nombre de fois qu’elle est appelée. Pour les appeleurs de SumList
il n’y a pas de raison de connaître cette extension. Nous dirions même plus : pour
des raisons de modularité, les appeleurs ne doivent pas connaître l’extension. Comme
nous l’avons vu dans la section 4.4, cela ne peut pas être programmé dans le modèle
déclaratif. Le mieux que l’on puisse faire est d’ajouter deux arguments à SumList
(un compte d’entrée et de sortie) et de les enfiler dans tous les appelants. Pour le faire
sans arguments supplémentaires, il faut un état explicite :
Un état explicite dans une procédure est un état dont l’existence
s’étend au-delà d’un appel de la procédure sans être présent dans les
arguments de la procédure.
L’état explicite ne peut pas être exprimé dans le modèle déclaratif. Pour l’obtenir,
nous étendons le modèle avec un nouveau concept, une sorte de conteneur que nous
appelons une cellule. Une cellule a un nom, une durée de vie illimitée et un contenu
qui peut être changé. Si la procédure connaît le nom, elle pourra changer le contenu.
Le modèle déclaratif étendu avec des cellules s’appelle le modèle avec état.
Contrairement à l’état déclaratif, l’état explicite n’est pas seulement dans l’esprit du
programmeur. Il est visible dans le programme et le modèle de calcul. Nous pouvons
utiliser une cellule pour ajouter une mémoire à long terme à SumList. Par exemple,
nous pouvons compter le nombre de fois qu’elle est appelée :
local C={NewCell 0} in
fun {SumList Xs S}
C:=@C+1
case Xs of nil then S
[] X|Xr then {SumList Xr X+S} end
end
fun {SumCount} @C end
end
C’est la même situation qu’avant, mais nous définissons une cellule et nous mettons à
jour son contenu dans SumList. Nous ajoutons aussi la fonction SumCount pour
rendre l’état observable. Voici un résumé des nouvelles opérations sur l’état explicite.
NewCell crée une nouvelle cellule avec un contenu initial donné (0 dans l’exemple).
© Dunod – La photocopie non autorisée est un délit
Précédent

- 238/370

Suivant