“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 220 — #230
i
i
i
i
i
i
i
i
220
5
• La programmation avec état explicite
Les degrés de la déclarativité
La programmation avec état est souvent appelée programmation impérative et la
programmation sans état programmation déclarative. Ces derniers termes ne sont
pas tout à fait corrects, mais la tradition a maintenu leur utilisation. La programmation
déclarative, prise à la lettre, signifie programmation avec des déclarations : dire ce
qu’il faut (le « quoi ») et laisser le système choisir l’algorithme (le « comment »). La
programmation impérative, prise à la lettre, signifie programmation avec des commandes : dire comment faire quelque chose. Dans ce sens, le modèle déclaratif du
chapitre 2 est impératif aussi, puisqu’il définit des séquences de commandes.
Le vrai problème est que « déclaratif » n’est pas une propriété absolue, mais une
question de degré. Le langage Fortran, développé vers la fin des années 1950, est
le premier langage populaire qui permet d’écrire les expressions arithmétiques dans
une syntaxe qui ressemble à la notation mathématique [8]. Par rapport à un langage
d’assemblage, c’est certainement déclaratif ! On pouvait dire à l’ordinateur de calculer
I+J sans lui préciser où trouver I et J dans la mémoire ni quelles instructions
machines utiliser pour les additionner. Dans ce sens relatif, les langages deviennent
de plus en plus déclaratifs au cours des années. Après Fortran il y eut Algol-60 et
la programmation structurée [19, 20, 70], qui a mené à Simula-67 et aux langages
orientés objet modernes [71, 75].
1
Ce livre reste fidèle à l’usage traditionnel du terme déclaratif pour la programmation
sans état et du terme impératif pour la programmation avec état. Le modèle de calcul
du chapitre 2 est appelé « déclaratif », même si les modèles postérieurs sont peut-être
plus déclaratifs, parce qu’ils sont plus expressifs. L’usage traditionnel est conservé
car il y a un sens important dans lequel le modèle déclaratif est vraiment déclaratif.
Ce sens apparaît quand on regarde le modèle des points de vue de la programmation
logique et de la programmation fonctionnelle :
– Un programme logique peut être « lu » de deux manières : soit comme un
ensemble d’axiomes logiques (le « quoi ») soit comme un ensemble de commandes (le « comment »). Cette dualité est résumée par la célèbre équation
de Robert Kowalski : Algorithme = Logique + Contrôle [55, 56]. Les axiomes
logiques, quand ils sont supplémentés par des informations de contrôle (implicites ou données explicitement par le programmeur), définissent un programme
qui peut être exécuté sur un ordinateur. Cette dualité existe aussi pour le modèle
déclaratif.
– Un programme fonctionnel peut aussi être « lu » de deux manières : soit comme
la définition d’un ensemble de fonctions dans le sens mathématique (le « quoi »)
1. Il est remarquable que ces trois langages aient tous été conçus dans une période de dix ans, de 1957 à
1967. Comme les langages Lisp et Absys datent aussi de cette période et que le langage Prolog est de
1972, nous pouvons parler d’un véritable âge d’or pour la conception des langages de programmation.
Précédent

- 235/370

Suivant