Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

À propos d’un texte de Jean-François Perrot :
Modèle objet : réponse de Michel Volle
Article mis en ligne le 18 janvier 2011
dernière modification le 20 janvier 2015

par Michel Volle

Ce texte est une réponse à un compte-rendu d’un chapitre de Jean-François Perrot.

Dans la même veine, vous pouvez également lire un texte de Christian Queinnec, sans oublier le classique de Luca Cardelli.

J’ai lu le texte de Perrot sur les langages à objets que tu m’as recommandé.

Il est évidemment d’un bon niveau mais il aurait été plus efficace si Perrot avait laissé de côté la comparaison des langages de programmation. Cet alourdissement du propos l’a empêché d’aller au fond des questions d’implémentation : elles ne peuvent être efficacement abordées qu’à partir d’une représentation simplifiée (comme le fait Knuth lorsqu’il décrit l’exécution d’un programme en simulant un ordinateur ad hoc, le MMIX).

En outre Perrot a voulu, pour être objectif, ne pas prendre parti dans le conflit entre les philosophes réalistes héritiers d’Aristote, pour qui l’existence du monde extérieur est à la fois une évidence (pour l’action) et un axiome (pour la pensée), aux philosophes idéalistes qui, comme Descartes, éprouvent le besoin de « démontrer » l’existence du monde extérieur ou qui, comme Kant, élucident les conditions intérieures de la connaissance sans se soucier de sa rencontre avec les choses que contient le monde extérieur.

Or dans un tel conflit il faut prendre parti d’un côté ou de l’autre, on ne peut être ni des deux à la fois ni entre les deux. Il se trouve que l’informatique, étant orientée vers l’action, relève du réalisme : comme celui-ci n’est pas à la mode parmi les philosophes actuels, leur réticence contribue à la confusion des idées concernant l’informatique. Il est
d’ailleurs navrant de les voir associer les adjectifs « naïf » ou « vulgaire » au réalisme alors qu’ils agissent tous en réalistes dans leur vie courante : comme dit Gilson, « ils gagnent leur vie en réalistes en enseignant l’idéalisme »

Les « données » sont des observations opérées sur le monde extérieur, les « objets » sont des représentations de choses qui se trouvent dans le monde extérieur. Elles sont sélectives comme toute représentation et leur sélectivité est guidée par l’adéquation à l’action. Tout cela ne fait que décalquer dans le support informatique l’appréhension humaine du monde extérieur qui s’est décalquée longtemps avant dans la parole et dans
l’écriture.

Il ne faut d’ailleurs pas se faire un monde d’opérations intellectuelles qui sont soit parfaitement balisées par la tradition de la pensée logique, soit des plus familières dans la vie quotidienne (sans que nous en ayons toutefois une claire conscience).

  1. La relation d’héritage simple est une démarche classificatoire et ensembliste : c’est de l’Aristote pur, mais outillé pour produire commodément du code. L’héritage multiple est tellement rare que ce n’est pas la peine d’en parler. L’opération qui consiste à hériter d’une classe, puis à transformer certaines méthodes, peut être techniquement commode mais elle rompt la hiérarchie de l’héritage : elle permet d’obtenir de nouvelles classes qui contiendront des OGM, « objets génétiquement modifiés ».
  2. La différence entre extension et intension fait partie de notre pensée quotidienne : la classe des chats contient tous les chats possibles (intension) mais quand le programme fonctionne elle contient ceux des chats réels dont la représentation a été instanciée sous forme d’objets (extension). Il n’y a pas là de quoi... fouetter un chat : nous pensons
    toujours de la sorte.
  3. Les langages à objet fonctionnent selon un principe de simulation : l’exécution du programme commence par la classe « main » qui envoie des messages à d’autres classes (ou à l’IHM, ou à des bases de données), et chaque objet fonctionne alors comme un petit ordinateur en réseau. C’est le principe de Simula et de Smalltalk.
  4. Les objets ont un cycle de vie, tout comme nos représentations des choses du monde extérieur puisque ces choses, comme toi et moi, évoluent sans cesse. C’est délicat à programmer mais ça marche très bien (contrôle des post- et pré-conditions).
  5. Enfin, les modèles à objets ne sont pas seulement ensemblistes et classificatoires : ils comportent des relations organiques. Pour m’expliquer, voici un exemple. Un de mes lecteurs m’a écrit un jour : « un système d’information est un ensemble de lignes de code ». Je lui ai répondu : « votre corps est un ensemble de cellules. Mais si vous vous cassez le fémur, vous ne direz pas “telles et telles de mes cellules osseuses se sont rompues”, mais “mon fémur est cassé”. Vous considérez alors non pas les cellules, mais un organe qui remplit dans votre corps une fonction, laquelle est gênée par la fracture ». La relation d’association, déjà présente dans le modèle conceptuel de données entité – relation et dans les bases de données relationnelles, est bien sûr utilisable en modélisation par objets. Elle complète utilement la hiérarchie ensembliste des classes sur laquelle tu t’es focalisé.
  6. Du point de vue de l’implémentation, ne peut-on d’ailleurs pas dire que les langages à objets forment une couche au dessus de l’ensemble classique « base de données relationnelles + moniteur transactionnel », qui lui fournit des outils et qu’elle complète ? C’est ainsi que je me représente les choses mais je ne suis pas sûr d’avoir raison.