Contexte historique et influences
Les années 1960 voient l’émergence de concepts clés dans les laboratoires ARPA et les universités : le système Sketchpad (1963), le langage Simula II (1967) et les premiers systèmes de partage de temps. Ces travaux introduisent la notion de symbiose homme‑machine et les premiers modèles d’interaction graphique. Le FLEX Machine, développé entre 1967 et 1969, constitue l’une des premières machines personnelles à architecture orientée objet, préfigurant les exigences de portabilité et d’interaction directe qui seront reprises par Smalltalk.
Architecture et primitives de Smalltalk
Smalltalk repose sur un modèle d’objet unique où chaque entité combine état et comportement et ne communique que par messages. Le système utilise un jeu de byte‑codes interprétés par un moteur dédié, ce qui permet l’exécution dynamique de code sur des machines aux capacités limitées. L’interface introduit les fenêtres superposées, le dessin de polices, la peinture, l’animation et la génération de musique, toutes pilotées par le même mécanisme de messagerie, démontrant une intégration profonde entre UI et logique applicative.
Évolution des versions de Smalltalk
De Smalltalk‑71 (1971) à Smalltalk‑80 (1980), chaque itération ajoute des fonctionnalités mesurables. Smalltalk‑72 formalise le principe d’héritage de classe, tandis que Smalltalk‑74 introduit la gestion de la mémoire « ooze storage », un système de collecte de déchets basé sur le comptage de références. Smalltalk‑76, présenté lors de la démonstration Apple, ajoute le support complet de l’héritage multiple et un environnement de développement intégré. La version finale, Smalltalk‑80, standardise le event‑driven loop décrit dans l’Annexe IV, offrant une boucle d’événements qui orchestre les entrées clavier, souris et timers de façon asynchrone.
Impact sur la programmation orientée objet
En consolidant le modèle d’objet unique, le passage de messages et la gestion dynamique de code, Smalltalk influence directement les langages ultérieurs tels que Objective‑C, Ruby et Python. La séparation stricte entre état interne et interface publique, illustrée par les byte‑codes et le garbage collector, fournit un cadre de référence pour la conception de systèmes modulaires. Malgré l’absence de standardisation officielle à l’époque, les concepts introduits – notamment l’héritage de classe et le modèle d’événements – sont aujourd’hui intégrés dans la plupart des environnements de développement modernes.