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.