Note de lecture : Serial Communications, A C++ Developer’s guide, par Mark Nelson
Note : 7 ; Bien que désormais obsolète (car concerne surtout Windows 16 bits), reste intéressant sur les principes de gestion des ports série.
Tant que je suis dans les antiquités…en voici une tout à fait honorable ! Certes ce livre a perdu une grande partie de son intérêt, d’abord avec l’arrivée du Windows 32 bit et de TAPI puis des infrastructures et librairies qui rendent aujourd’hui transparente les vicissitudes des protocoles de communication.
Cet ouvrage nous permet, aujourd’hui encore, de nous ressourcer sur la mise en œuvre des communications à bas niveau, là où les caractéristiques du matériel ne peuvent être ignorées ! Mais la bête est imposante : ce sont 600 pages qui se présentent à nous sur ce seul sujet, le tout en 11 chapitres ! Le premier d’entre-eux rappellera des souvenirs aux plus anciens d’entre nous, il aborde l’interface RS 232 C sur 64 pages. Tout y passe, depuis la norme du connecteur, la signification des signaux et les protocoles de transmission modem. L’électronique sous-jacente, les fameux UART sont évoqués, mais leur gestion fera l’objet d’un chapitre à part. Finalement les protocoles d’échange de fichier (Kermit, ZModem, etc.) clôturent le chapitre. C’était en quelque sorte le tour du propriétaire.
Le chapitre 2 s’articule autour de la définition de la classe C++ RS232 ; il s’agit d’un wrapper abstrait sur lequel peu de méthodes concrètes « intelligentes » sont implémentées. Essentiellement les fonctions de lecture et écriture. C’est un bel exemple de mise sous forme de classe d’un protocole, car tous les signaux de la norme apparaissent sous forme de méthodes virtuelles. A part cela le chapitre est peu passionnant, essentiellement constitué de listings.
Ce sont près d’une centaine de pages qui sont dédiées au chapitre 3, dévolu à l’implémentation de RS232C sur l’UART 8250. Toute la première partie expliquant le fonctionnement de l’UART est réellement très intéressante même si je regrette le peu qui est consacré au 16550, certes nettement moins rependu à l’époque, mais nettement plus intéressant. Hélas la seconde moitié du chapitre est de nouveau consacré à de fastidieux listings bien peu expliqués…
Le chapitre 4, shared interrupt device rompt la monotonie avec seulement 25 pages. Il est consacré à l’accès aux ports COM dans l’architecture PC via les 2 interruptions qui leurs sont dédiées (pour 4 ports en principe accessibles). Le code du handler et les principes de gestion sont clairement appréhendés. Des informations par ailleurs rares dans la littérature, pour ne pas dire plus.
C’est à un périphérique plus exotique qu’est consacré le chapitre 5 : le Digiboard ! C’est donc une nouvelle sous-classe de RS232 qui nous attend. Un chapitre dont je soupçonne qu’il tenait à cœur à l’auteur, mais qui n’a pas retenu mon attention.
Plus intéressant pour moi, mais hélas plus légèrement traité, le chapitre 6 nous propose une nouvelle sous-classe de RS232, mais cette fois en s’appuyant sur les primitives disponibles dans le BIOS. Seul 30 pages y sont consacrées et l’auteur aurait pu faire plus d’effort pour développer plus clairement les interruptions du BIOS et leur exploitation.
Au chapitre 7, le FOSSIL driver se voit lui aussi consacrer une trentaine de pages. La profondeur de traitement est à peu près la même que pour l’implémentation BIOS. Mais j’avoue encore une fois que l’aspect exotique de cette norme fait que le chapitre n’a pas retenu mon attention.
Nouvelle alternative au chapitre 8 : une implémentation sur les API Windows. Près de 50 pages sont noircies sur le sujet. Cela paraît mieux, mais à l’époque où ces informations étaient vitales pour moi, la profondeur des informations restait bien insuffisante. Mais au moins le livre fournit des informations d’exploitations de ces APIs, choses pratiquement indisponibles par ailleurs en 1993 !
Le chapitre 9 est long de 40 pages. C’est un changement, car on quitte la couche RS232 pour s’attaquer à la gestion des modems, avec les fameuses normes V24, V32 et autres et bien sûr le protocole Hayes. La question est bien traitée et fort clairement. C’est probablement la meilleure source d’information que j’ai pu croiser sur la question.
Au chapitre 10, on s’attaque aux transferts de fichier, avec les protocoles XModem, YModem et ZModem. La question ne m’intéresse guère et j’ai du mal à avoir un avis sur le chapitre. Le sujet semble bien traité et le listing de fichier une fois encore un peu longuet.
Le dernier chapitre du volume va s’intéresser à l’émulation de terminal. Le thème remplit 60 pages et ne semble guère passionnant tel qu’il est traité ici. On est beaucoup dans l’explication de texte du listing, fort peu sur la déconstruction du problème.
L’auteur a développé une petite librairie de classes multiplateformes, multi-modems et multi contrôleurs qui, ma foi, m’a bien fait de l’usage à son époque. Le livre gravite entièrement autour de cela ce qui rend parfois le propos un peu rébarbatif et les listings ennuyeux. Mais le volet technique est très affuté et ce fut très clairement la meilleure source d’information sur bon nombre de sujets qui y sont traités. Difficile de faire valoir une pertinence après presque 25 ans, pourtant le volume mérite d’être conservé à titre d’archive !
Référence complète : Serial Communications : A C++ Developer’s guide – Mark Nelson – Prentice Hall / M&T Books 1992 - ISBN : 0-13-011776-1
Note de lecture : Conception orientée objet, par Peter Coad & Edward Yourdon
Note 3 ; Les principes embryonnaires de la conception objet
Il y a « l’avant » Design Patterns, et « l’après ». Cet ouvrage est dans la catégorie « avant ». Il fait aussi suit à « l’Analyse orientée objet » des mêmes auteurs. Et son âge respectable le classe parmi les livres qui ont servi de fondation à l’orienté objet. Bien sûr, depuis on a construit pas mal d’étages, et seul les férus d’histoire informatique auront à cœur de se replonger dans ces textes !
Le problème avec « l’avant » Design Patterns, c’est que l’on parle bien d’analyse et de conception (ici séparés en 2 livres) et que l’on prétend faire la différence clairement, mais en fait ce n’est pas le cas ! Au long des 160 pages du texte principal, les auteurs peinent à exposer des aspects clairement différents entre l’analyse et la conception. Voyons cela.
En plus du texte principal découpé en 10 chapitres, l’ouvrage compte 24 pages d’annexes, elles-mêmes séparées en 3. Passé la quinzaine de pages d’avant-propos, ce sont les 10 pages du premier chapitre « améliorer la conception » qui ouvrent le bal. Bien que cela ne soit pas avoué ouvertement, la conception y est présenté comme quelque chose d’ajoutée « après coup » pour améliorer la qualité et la maintenance ! On y évoque aussi les principes d’encapsulation et l’organisation fonctionnelle.
Le chapitre 2 traite du passage au modèle en couche. Un modèle en couche bien rigide qui en possède nécessairement 5 ! Les auteurs posent aussi leur position sur le passage de l’analyse à la conception : c’est un continuum. J’aime tout particulièrement le passage où l’on explique que le modèle passe d’analyste aux concepteurs qui reviennent avec une matrice de traçabilité pour prouver qu’ils ont effectivement fait quelque chose !
Après voir tenté de nous faire admettre aux forceps qu’il y a une différence entre analyse et conception, le chapitre 3 en rajoute une couche. Oui, la COO est différente : on ajoute des abstractions, on optimise pour la vitesse, on ajoute des composants bas-niveau. Si vous n’avez pas été convaincus par le chapitre 2 (comme moi), il y a peu de chances que vous le soyez par les 20 pages de ce chapitre ci.
C’est de composants d’interaction humaine qu’il s’agit au chapitre 4. Les 15 pages de ce chapitre sont assez perturbantes, car il commence par une note résolument fonctionnelle (mais sans l’avouer) : identification des utilisateurs et les cas d’usage ! La partie résolument conception est un exposé de l’utilisation de l’outil OOATool ! Un chapitre à oublier.
Le chapitre 5 ne fait que 6 pages. C’est bien suffisant pour traiter le « composant de coordination des tâches ». Il s’agit du pattern Command (en moins bien).
C’est la gestion de données qu’est sensé traiter le chapitre 6 sur 15 pages. On connaît la complexité du sujet. Et les auteurs font leur possible pour l’esquiver. On aurait pu économiser du papier.
Plus de 30 pages sont consacrées au passage en revue des langages OO de l’époque et de la façon dont ils abordent les concepts OO : C++, Pascal Objet, Objective C (si, si), Eiffel et même Ada. Sans être un modèle du genre, cela reste mon chapitre préféré !
Au chapitre 8, on parle des critères de la conception OO. Disons que c’est mon deuxième chapitre préféré : couplage faible, forte cohésion, simplicité. Les prémisses de ce qui fera le succès des livres de Robert Martin est bien là !
L’avant-dernier chapitre est consacré aux outils. Donc un chapitre à peu près inutile. Heureusement il ne pèse que 5 pages. C’est à peu près la taille du dernier chapitre qui sert essentiellement à nous donner la bénédiction des auteurs pour partir sur la conception en objet !
Nous sommes ici encore dans le schéma des méthodologies rigides et de styles architecturaux qui sont de mêmes ! Ne perdez pas votre temps sur cet ouvrage si votre intérêt est autre qu'historique. Le texte ne recèle pas de pépites le gardant pertinent 25 ans plus tard…
Référence complète : Conception orientée objet - Peter Coad & Edward Yourdon - Masson 1993 (V.O.: Object Oriented Design - Prentice Hall 1991) - ISBN: 2-225-84212-4