Langages à objets

Tout langage favorisant le style de programmation par objets peut prétendre au titre (envié) de “langage à objets”. Actuellement, les langages à objets foisonnent. Voici un essai de classification:

  1. L’ancêtre génial dont tous descendent (cf. figure 1) est Simula-67 [20], issu lui-même d’Algol-60, [59] et [54]. Tout l’essentiel y est, y compris le mode d’emploi des objets! Comme son nom l’indique, ce langage fut conçu pour les applications de simulation de processus complexes.

    PIC


    FIG. 1: Esquisse généalogique de SQUEAK

    On peut voir Simula comme une extension d’Algol-60, auquel sont ajoutés les concepts de classe (sous une forme plus complexe que la notion actuelle) et d’instance. C’est précisément pour pouvoir simuler commodément le monde réel que ces notions ont été introduites.

    Simula contient aussi un puissant mécanisme de coroutinage qui a (presque) disparu chez ses successeurs.

  2. Les extensions de langages impératifs classiques sont apparues à partir de 1983 environ, quand le mode de la programmation par objets a commencé à se répandre sous l’influence de SMALLTALK [3130] et Flavors [15]. Ainsi, à partir du langage C [43] ont été développés les langages C++ [74] et Objective C [18] et à partir de Pascal [39] on a vu apparaître le langage Object Pascal, [38] et [70]. Il existe maintenant des extensions objet pour presque tous les goûts dans tous les langages impératifs, par exemple: object-oriented Forth [62], Object Fortran [65], ou encore Object Oriented Cobol [16].

    On peut les voir comme des versions simplifiées de Simula, bâties sur des substrats différents. Leur clientèle se recrute principalement dans le domaine du Génie Logiciel. Ces langages sont plutôt des langages à types abstraits que des langages à objets, et devraient se comparer à CLU [46] et à ADA [24].

  3. Puis existent les extensions de LISP [49]. Il y en a toute une kyrielle: Flavors [52] de la machine Lisp Symbolics, LOOPS [9] de Xerox PARC et Interlisp, CEYX [33] et ALCYONE [34] issues de Le_Lisp, KOOL, [3] et [4], de Bull développé en Le_Lisp, ObjVlisp [11] comme extension de Vlisp, CLOS, le CommonLISP Object System [8], et une multitude d’autres (il en naît tous les jours).

    Cette floraison est due au fait que la programmation par objets s’acclimate bien en Lisp, en raison de l’incroyable plasticité du langage, et de sa position “culturelle” comme langage principal de l’Intelligence Artificielle. En effet, ces systèmes sont très souvent à la base de logiciels d’Intelligence Artificielle plus complexes, visant la représentation de connaissances et l’écriture de systèmes experts.

    Pour des raisons analogues, les extensions de Prolog [29] vers les objets se multiplient: LAP [36], EMICAT, OBJLLOG-II [25], TAO [76] ...

  4. Enfin, un langage qui se suffit à lui même, implémenté directement: SMALLTALK, de Xerox PARC. Son père spirituel est Alan Kay et sa machine Flex [41], dont les concepts de bases ont été fortement influencés par le programme SketchPad de Ivan Sutherland [75]. Il a été développeé au Xerox Palo Alto Research Center, d’où est aussi sorti LOOPS.

    La version actuelle est SMALLTALK-80. Elle a été précédée par SMALLTALK-72 et SMALLTALK-76. Une très belle discussion sur l’histoire de SMALLTALK est donnée dans [42].

    C’est un petit langage mais un gros système, très orienté vers la gestion d’un écran bit-map. Initialement, SMALLTALK ne tournait que sur les machines Xerox (1108, 1186), sur SUN et sur les ordinateurs Tektronix 4404 et 4406. Depuis sont apparues des versions pour à peu près tous les ordinateurs et tous les systèmes d’exploitation.

    SMALLTALK a exercé une influence profonde sur le développement de la programmation par objets, dont il offre l’exemple le plus achevé, et (à travers le MacIntosh de Apple, développé par des transfuges de l’équipe SMALLTALK originelle) sur toute l’informatique moderne. Sa simplicité conceptuelle et la richesse de son environnement justifient amplement son étude, même si on n’envisage pas de l’utiliser par la suite.

    Des versions plus petites ont aussi été développées, comme par exemple: SMALLTALK-V par Digitalk ou Little Smalltalk [12] par Timothy Budd. Cette dernière est particulièrement utile pour se familiariser avec l’implémentation d’interprètes des langages objets. Mais considérons le dernier né de la famille SMALLTALK: SQUEAK [37]. Il a été développé par une équipe centrée autours des concepteurs originaux de SMALLTALK, principalement Alan Kay, Pat Brecker, Dan Ingalls, Scott Wallace, Ted Kaehler, Jon Maloney, Kim Rose, Andreas Raab et Michael Rueger. Il intègre les tous derniers développements des interfaces hommes/machines et il resimplifie la machine virtuelle SMALLTALK, qui – quand même – avait pris de l’âge. Il est distribué en licence Open Source (allez voir sur www.squeak.org), et tourne sur quasiment tous les ordinateurs. C’est à travers ce langage que nous allons aborder la programmation par objets dans la suite de ce texte.