“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 222 — #232
i
i
i
i
i
i
i
i
222
5
• La programmation avec état explicite
de concentrer chaque responsabilité dans une abstraction de données, au lieu de
l’étaler partout dans le programme.
– Enfin, la section 5.6 explique la programmation à grande échelle, c’est-à-dire
la programmation par une équipe. C’est une extension de la présentation de la
programmation à petite échelle donnée dans la section 3.8.
Le chapitre 6 poursuit la présentation de l’état avec un style de programmation particulièrement utile, à savoir la programmation orientée objet. Étant donné sa grande
applicabilité, nous lui consacrons un chapitre entier.
5.1 L’ÉTAT C’EST QUOI ?
Nous avons déjà programmé avec l’état dans le modèle déclaratif du chapitre 3. Par
exemple, les accumulateurs de la section 3.4.3 sont de l’état. Alors, pourquoi avonsnous besoin de tout un chapitre pour l’état ? Pour comprendre pourquoi, il faut regarder
de près le concept d’état. Dans sa forme la plus simple, nous pouvons définir l’état
ainsi :
Un état est une séquence de valeurs dans le temps qui contient les
résultats intermédiaires d’un calcul souhaité.
Nous examinerons les différentes manières dont l’état peut être présent dans un programme.
5.1.1 L’état implicite (déclaratif)
Il est possible que la séquence n’existe que dans l’esprit du programmeur. Le modèle
de calcul reste déclaratif. Ce genre d’état s’appelle l’état implicite ou l’état déclaratif.
Par exemple, prenez la fonction déclarative SumList :
fun {SumList Xs S}
case Xs of nil then S
[] X|Xr then {SumList Xr X+S} end
end
À chaque appel récursif, il y a deux arguments : le reste inexaminé Xs de la liste
d’entrée, et la somme S de la partie examinée de la liste d’entrée. Pendant le calcul de
la somme d’une liste, SumList s’appelle plusieurs fois. Prenons la paire (Xs#S) à
chaque appel parce qu’elle nous donne toutes les informations dont nous avons besoin
pour caractériser l’appel. Pour l’appel {SumList [1 2 3 4] 0}, nous obtenons
la séquence suivante des paires :
[1 2 3 4] # 0
[2 3 4] # 1
[3 4] # 3
[4] # 6
nil # 10
i
i
i
i
i
i
i
i
222
5
• La programmation avec état explicite
de concentrer chaque responsabilité dans une abstraction de données, au lieu de
l’étaler partout dans le programme.
– Enfin, la section 5.6 explique la programmation à grande échelle, c’est-à-dire
la programmation par une équipe. C’est une extension de la présentation de la
programmation à petite échelle donnée dans la section 3.8.
Le chapitre 6 poursuit la présentation de l’état avec un style de programmation particulièrement utile, à savoir la programmation orientée objet. Étant donné sa grande
applicabilité, nous lui consacrons un chapitre entier.
5.1 L’ÉTAT C’EST QUOI ?
Nous avons déjà programmé avec l’état dans le modèle déclaratif du chapitre 3. Par
exemple, les accumulateurs de la section 3.4.3 sont de l’état. Alors, pourquoi avonsnous besoin de tout un chapitre pour l’état ? Pour comprendre pourquoi, il faut regarder
de près le concept d’état. Dans sa forme la plus simple, nous pouvons définir l’état
ainsi :
Un état est une séquence de valeurs dans le temps qui contient les
résultats intermédiaires d’un calcul souhaité.
Nous examinerons les différentes manières dont l’état peut être présent dans un programme.
5.1.1 L’état implicite (déclaratif)
Il est possible que la séquence n’existe que dans l’esprit du programmeur. Le modèle
de calcul reste déclaratif. Ce genre d’état s’appelle l’état implicite ou l’état déclaratif.
Par exemple, prenez la fonction déclarative SumList :
fun {SumList Xs S}
case Xs of nil then S
[] X|Xr then {SumList Xr X+S} end
end
À chaque appel récursif, il y a deux arguments : le reste inexaminé Xs de la liste
d’entrée, et la somme S de la partie examinée de la liste d’entrée. Pendant le calcul de
la somme d’une liste, SumList s’appelle plusieurs fois. Prenons la paire (Xs#S) à
chaque appel parce qu’elle nous donne toutes les informations dont nous avons besoin
pour caractériser l’appel. Pour l’appel {SumList [1 2 3 4] 0}, nous obtenons
la séquence suivante des paires :
[1 2 3 4] # 0
[2 3 4] # 1
[3 4] # 3
[4] # 6
nil # 10
