La programmation orientée objet n'est pas récente et a bien failli voir le jour avec AutoCAD R11

Le texte suivant est la traduction en français du texte en anglais de John Walker. Source: ClassWar

Il intéressera les développeurs amateurs et professionels d’AutoCAD et leur apprendra (peut-être) que la programmation orientée objet n’est pas récente et a bien failli voir le jour avec AutoCAD R11…

Note sur le droit d’auteur de John Walker: Except for a few clearly-marked exceptions, all the material on this site (fourmilab) is in the public domain and may be used in any manner without permission, restriction, attribution, or compensation.

En 1990, Autodesk travaillait à la sortie de la version 11 d’AutoCAD, dont l’une des principales caractéristiques était l’AutoCAD Development System (ADS), qui permettait aux utilisateurs et aux développeurs tiers d’étendre AutoCAD avec des programmes en langage C qui s’exécutaient aussi rapidement que le code interne d’AutoCAD, ajoutant de nouveaux objets, commandes et informations de base de données sans nécessiter aucune modification d’AutoCAD. Parallèlement, au début de l’année 1990, j’ai achevé le développement d’ATLAST, le « Autodesk Threaded Language Application System Toolkit », un langage intégré de type FORTH destiné à l’origine (mais jamais utilisé en réalité) à assurer la communication entre un AutoCAD « sans tête » et des frontaux spécifiques à la machine, adaptés aux systèmes de fenêtres et aux paradigmes d’interface utilisateur des plates-formes exécutant AutoCAD.

Il m’est apparu qu’en utilisant ADS et ATLAST comme base, je pouvais, avec un effort modeste, créer un véritable système de CAO orienté objet, fournir un exemple travaillé d’une application ADS ambitieuse pour les développeurs souhaitant apprendre le système, et démontrer comment ATLAST permettait de construire facilement des systèmes rapides, ouverts et extensibles. Je pouvais également m’amuser un peu aux dépens d’Intergraph, ce que j’ai toujours apprécié.

C’est ainsi qu’est né ClassWar, un acronyme plutôt douloureux pour « Class Language Application Support System Within AutoCAD. Vraiment ! », qui a encore fait tiquer Intergraph, dont la force de vente se moquait d’AutoCAD en le qualifiant de « CAO-jouet pour gens peu sérieux », avec le dédain typique de l’aristocratie établie pour les arrivistes prolétaires. ClassWar transformait les objets (entités) de la base de données d’AutoCAD en objets programmables, qui pouvaient intégrer du code ATLAST et des extensions ClassWar mettant en œuvre chacun des piliers de l’orientation objet. Il permet aux utilisateurs et aux développeurs de programmer de nouveaux objets avec leur propre comportement, et de s’appuyer sur des bibliothèques d’objets déjà développés pour développer les leurs.

ClassWar a été livré avec AutoCAD version 11 en tant que l’un des nombreux programmes de démonstration ADS, mais n’a jamais été un produit Autodesk officiellement pris en charge. Plusieurs clients l’ont expérimenté et ont construit des objets personnalisés en l’utilisant mais, à ma connaissance, aucun d’entre eux n’a été mis sur le marché ou largement utilisé.

Pour information, John Walker fut l’un des fondateur d’Autodesk mais aussi son premier président et l’un de ses principaux architectes. Pour ceux que ça intéresse, il a aussi été l’auteur du mémo interne le plus publicisé de tous les temps. Il annonçait la fin d’Autodesk si un virage n’était pas fait (Voir "Autodesk’s « final days. »).

Tristement, John Walker est décédé ce 2 février 2024 à l’age de 75 ans. Voir Autodesk co-founder John Walker dies, aged 75

C’est avec beaucoup d’humilité si je repasse derrière ce qui a été écrit. Il devait s’agir de petites coquilles. On sait qu’il était extrêmement occupé.

Dans ClassWar, il manque le mot runtime à la fin (i.e ClassWar, un acronyme plutôt douloureux pour « Class Language Application Support System Within AutoCAD Runtime).

Le premier AutoCAD vraiment orienté objet offert au public a été R13 (novembre 1994). Le système de développement pour AutoCAD (ADS) a été introduit avec AutoCAD 10 pour Mac puis AutoCAD 11 pour DOS. Ces versions introduisaient le langage C classique (et non C++, orienté objet). Le format des dessins reflétait encore la vieille mentalité, soit les 4 sections : environnement des variables; définitions (calques, styles, etc.); définition des blocs; le dessin lui-même.

Avec la venue de R13, le format des dessins abandonnait ce schéma au profit d’une architecture plus évolutive, comme par exemple la définition de murs en architecture.

Pour en revenir à ADS, je l’ai bien connu. On en trouve encore des traces dans les fichiers d’entête en C++ (fichiers à extension *.H). C’est toute l’histoire des ResultBuffer.

La grande différence entre le C (R10 Mac, R11 et R12) et le C++ (R13 à aujourd’hui) est immense. Le C était un langage de « seconde main », le principal étant AutoLISP. Ainsi, lorsqu’un appel était passé par AutoCAD ou AutoLISP aux fonctions en C, le message passait de AutoCAD à AutoLISP, puis à C via ce qu’on appelait le Inter Process Communication buffer (ou IPC) puis reprenait le chemin inverse pour donner la réponse à AutoCAD. C’était un processus considéré comme lourd.

Avec l’arrivée de R13, c’est le C++ qui est devenu le langage maître. Puisqu’on peut utiliser les mêmes ressources qu’AutoCAD utilise, il n’y a aucune limite. On peut par exemple révoquer certaines commandes beaucoup mieux que ce qui est offert aux dessinateurs. On peut également forcer l’exécution automatique d’une commande avec un double-clic sur n’importe quel objet, qu’il soit personnalisé ou non.

À titre de précision, le fichier de menu (*.cuix) permet de redéfinir l’action du double-clic sur une ligne ou une chaîne de caractère. Mais lorsque vous faites un double-clic sur un objet personnalisé, par exemple un PartRef dans AutoCAD Mechanical, vous ne pourrez que contempler la boite de dialogue par défaut. Ce PartRef est un objet analogue aux blocs avec attributs. Il permet donc de faire des listes de matériel. En C++ (ou ObjectARX), ne serait-il pas mieux qu’un double-clic fasse ouvrir la boite d’inventaire de votre système EPR ou d’inventaire ? C’est ce qu’on s’est permis de faire.

Note : ceci dépasse la portée de ce sujet mais il serait peut-être intéressant de préciser ce qu’est ObjectARX par rapport à DotNet ainsi que de préciser ce que font les fichiers à extension *.arx, *.dbx et *.crx. Je crois que ça n’intéressera pas la clientèle ciblée ici. Faites-moi signe.

1 « J'aime »

Oui John nous a quitté récemment, j’en parlais ici: