formations/algo/poo/cours/delicat.txt

93 lines
3.8 KiB
Plaintext

Points délicats de la programmation objet
=========================================
L'objectivisme
---------------
L'exemple des critiques de Edsger D. Dijkstra face aux objets (1983)
Les difficultés de l'objectivisme dans la programmation raisonnée.
Dans les années 60, les promesses de rédemption des "langages de haut niveau"
ne se sont pas matérialisées.
Les critiques de la lenteur du batch processing et du débugging de la
programmation procédurale ont débouché sur la nécessité de "l'interactive
programming". Cela devait "faciliter la programmation", "augmenter la
lisibilité et la compréhension du code".
Le fait est que une large part de l'histoire de la programmation peut être
écrit en termes de projets à plusieurs millions de dollars qui ont échoué dans
leurs objectifs.
Apparemment la programmation objet ne vient pas "naturellement", car
le desing objet demande beaucoup d'entrainement.
Une approche de la nouveauté consiste à se placer dans une position aussi
neutre que possible par rapport à cette nouveauté, par rapport à sa cohérence
interne. C'est comme d'apprendre une langue étrangère sans essayer de traduire
systématiquement dans sa propre langue. Il faut alors apprendre à "penser"
dans cette nouvelle langue.
La programmation objet est d'une telle nouveauté qu'il faut se libérer des
habitudes d'approcher le sujet en termes d'analogies.
La programmation raisonnée
--------------------------
**En programmation objet l'anthropomorphisme est le pire de tout.**
"And now we have the fad of making all sorts of systems and their components "intelligent"
or "smart". It often boils down to designing a wolly non-machine interface that makes
the machine as unlike a computer as possible."
Edsger D. Dijkstra
Dans le cas de la compréhension d'un programme, nous devrions nous intéresser
au programme dans sa logique propre, en ignorant temporairement le fait même
que le code va être compilé - transformé en code exécutable.
Cette approche est bien connue, elle s'appelle l'approche axiomatique.
Le point important est ici que le système de représentation anthropomorphique, l'utilisation
d'une terminologie antropomorphique érige une barrière à l'application du
programme. L'une des conséquences de l'anthropomorphisme en programmation
est que les manières les plus opérationnelles de programmer et de raisonner
sur les programmes sont alors rejetées comme "contre-intuitives", ou "trop
abstraites".
| "I think anthropomorphism is worst of all. I have now seen programs
| "trying to do things", "wanting to do things", "believing things to be
| true", "knowing things" etc. Don't be so naive as to believe that this use
| of language is harmless. It invites the programmer to identify himself
| with the execution of the program and almost forces upon him the use of
| operational semantics."
Edsger D. Dijkstra
"The anthropomorphic analogy is misleading. A computer program is a formal
system, not a collection of living beings. Forget that at your peril."
loup vaillant (loupvaillant.fr)
Le processus de la programmation raisonnée étant abstrait, sa réalisation est
subsumée à son design.
Dans ces conditions, un programme est comme un poème : on ne peut pas l'écrire
sans d'abord l'écrire. On ne le "conçoit" pas au préalable.
Mais aujourd'hui on parle de la programmation comme d'un processus de
production comme un autre, dont on peut mesurer la productivité.
(nombre de lignes de code produites, etc.)
"The pre-computer object that offers the closest analogy to a well designed
piece of software is an equally well-designed mathematical theory."
Edsger D. Dijkstra
Ceci se répercute dans notre manière d'enseigner la programmation.
Ce qui est appelé aujourd'hui "méthodologie" joue un rôle de plus en plus
important, on privilégie le design au détriment de la conception raisonnée
d'un programme.