La querelle des universaux et le statut des classes
dans la programmation par objets.
-
Exposé au séminaire d'informatique cognitive de l'UQÀM
le 28 septembre 2006
-
repris à Sherbrooke le 4 octobre,
-
- Intention
- Problèmes que pose la programmation par objets
- Esquisse de la querelle
- Réinterprétation en termes de programmation par objets
-
Déclaration d'intention :
pour une analyse critique des fondements de la programmation par objets
(abrégé ci-après en PPO)
Ce souci a été popularisé par le débat organisé à OOPSLA en 2002 sous le titre les objets ont échoué.
Le débat continue :
- une recherche récente sur Google donne 3 430 réponses à la requête "Objects have failed"
contre 195 à la requête "Objects have not failed" (essayez vous-même !)
- la question du devenir de la PPO a inspiré une table ronde à ECOOP 2006
- la prééminence du réseau, l'émergence de l'approche orientée vers les services mettent en difficulté
une vision naïve des objets. J'essaie d'aborder ce point ici.
Ma propre position est que le succès de la PPO est dû principalement à son adéquation remarquable
aux habitudes mentales que notre éducation nous a inculquées, à savoir
- la distinction entre un objet (concret, singulier) et le concept (abstrait, général) dont il est instance,
qui est réalisée en PPO par le couple objet / classe.
- la classification hiérarchique des concepts selon leur généralité
dont la relation d'héritage entre classes donne une approximation insuffisante, mais bien utile.
J'ai présenté mon point de vue sur la PPO en détail dans le chapitre introductif des actes de l'école d'été
Langages et modèles à objets, Etat des recherches et perspectives,
édité par R. Ducournau, J. Euzenat, G. Masini et A. Napoli, Collection Didactique, INRIA, pages 3-31, 1998.
Ce texte reste valable comme cadre du présent exposé. Le voici en pdf.
On trouvera un résumé de cette position dans
l'Introduction au numéro spécial de la revue
l'Objet
intitulé Des octets aux modèles, [L'Objet, RSTI, Hermes, Vol 10, N°4, p. 11-16].
Il me paraît donc nécessaire de procéder à une analyse critique de notre héritage conceptuel
et d'affiner la correspondance avec les structures de la PPO.
À titre d'exemple, rappelons-nous que notre héritage est double, et que nous sommes
- tantôt platoniciens (notamment quand nous faisons des mathématiques)
- tantôt aristotéliciens...
Un autre exemple est fourni par la distinction entre langages à classes (pratiquement tous les langages à objets en usage)
et langages à prototypes (dont le plus connu est Self) :
en pastichant Sartre [L'existentialisme est un humanisme, Paris, Nagel 1970, p. 17 sq. extrait],
on a envie de dire
- dans les langages à classes, l'essence précède l'existence
- dans les langages à prototypes, l'existence précède l'essence.
Reste à savoir précisément ce qu'on entend par essence et existence,
mais ceci est une autre histoire !
On notera au passage que, pour Sartre comme pour la tradition, ces questions se posent avant tout
pour l'homme et pour Dieu, dont les programmeurs ne se préoccupent que rarement.
D'une manière plus générale, l'idée que les intuitions que nous formons sur la base de l'expérience des objets concrets
ne peuvent pas s'étendre ohne weiteres à de entités abstraites, cette idée ne semble pas avoir préoccupé les penseurs
qui sont à l'origine de la tradition dont nous sommes imbus.
Or, elle intervient fortement dans la modélisation des systèmes informatiques qui précède leur programmation
(UML et toute la ligne de l'ingénierie dirigée par les modèles - MDE, Model-Driven Engineering).
Nous savons aujourd'hui que tout n'est pas réifiable !
-
Problèmes philosophiques posés par la programmation par objets (PPO)
-
Le programme (contenu de la machine) comme modèle du monde réel
- Le "monde intérieur" de la machine et le "monde extérieur" supposé réel
- Les deux niveaux : Runtime / Compiletime
- Problème du rapport entre le modèle et le monde réel.
-
Rupture épistémologique induite par la PPO
- L'approche traditionnelle (algorithmique) évite le débat sur la validité du modèle
elle le renvoie à la validité de la modélisation mathématique,
en s'appuyant sur la puissante tradition de la physique depuis Galilée et Newton
(adéquation manifeste d'un tableaux de nombres pour représenter le réel)
- L'approche par objets ne peut pas éviter ce débat
(rapport entre l'objet informatique dans le modèle et son référent dans le monde)
-
Les classes et leur statut
- Le problème de la réalisation des instances :
Les classes sont d'abord un mécanisme permettant de réaliser des objets en machine.
Dans un second temps, elles prennent le statut de représentation des concepts.
- Principe de la représentation
- Principe de l'interprétation : l'indirection bien placée (cf. l'Introduction signalée ci-dessus)
- Glissement vers les "concepts" vus en extension :
projection irrésistible de la polarité instances multiples / classe unique
sur le schéma mental instances concrètes / concept abstrait
(alors qu'en machine les instances ne sont pas plus concrètes que la classe !) - Confirmé par l'interprétation de l'héritage !
- Les classes comme objets
- Les classes comme types : le problème de l'héritage et du sous-typage
-
Esquisse d'un débat médiéval
Le débat porte sur la nature (réelle ou imaginaire) des genres, des espèces et autres concepts.
-
Réinterprétation en termes de programmation par objets
- Voir les classes de la PPO comme des universaux au sens de la Querelle...
Le statut des classes devient l'enjeu d'un nouveau rebondissement :
- Les classes sont des objets correspond à la position réaliste
- Les classes sont des types correspond à la position nominaliste
- La hiérarchie d'héritage vue comme une réalisation de l'Arbre de Porphyre :
cf. la synthèse proposé par la Wikipedia en allemand
- On notera que Porphyre [Isagogè, II, 6] met clairement en évidence le saut qui se produit
aux feuilles de l'arbre d'héritage
quand on cesse de spécialiser les classes pour passer aux individus :
il parle d'espèce spécialissime (trad. Tricot) qui n'est qu'espèce et non pas genre,
doù le schéma donné par A. de Libera [La querelle..., op. cit. p. 45]
Socrate (individu) -> Homme (espèce spécialissime) ->
Animal raisonnable -> Animal -> Corps animé -> Corps ->
Substance (genre suprême)
La programmation par objets devrait intéresser les philosophes...