![]() |
L'encapsulation |
--ooOoo--
"L'encapsulation", qu'es acò :
En informatique, l'encapsulation est la technique qui consiste à exécuter, dans un programme, des modules externes déjà écrits et prêts à l'emploi pour en exploiter les résultats.
C'est une caractéristique de l'exécution orientée objet par analogie à la programmation orientée objet mise à disposition, au niveau de l'écriture des programmes, par certains compilateurs comme le C++ par exemple.
Pour illustrer cette définition et avant de décrire le développement, voici, ci-après, une petite illustration du dernier jet de la réponse que j'ai donnée au professeur de mathématiques. Il est incomplet et j'attends de voir si cette démarche répond à ses besoins pour septembre 2009. Le programme encapsulé qui affiche cette image s'appelle "lissajous.f" (source ici) . Il est écrit en Fortran mais tout langage peut être utilisé. Seule contrainte pour la communication avec le programme encapsuleur : n'utiliser que les entrées et sorties standard "stdin" et "stdout".
Lancé directement dans la console, le programme "lissajous.f" affichera toutes les commandes telles qu'elles ont été codées dans les ordres READ et WRITE comme le montre l'image ci-dessous pour les compilations, les constructions des exécutables et les sorties des tests d'encapsulation qui sont décrits plus précisément dans la page Les "pseudo-terminaux".
Très nombreuses sont celles qui correspondent aux deux tracés de la courbe (clé "$trace:"). Cette sortie standard a toutes les caractéristiques d'une "liste-image" analogue à celles que sortent les logiciels de dessins dans leurs propres codages ".dxf", ".hpgl", ".plt", "cgm", etc... Je ne me suis pas appuyer sur l'un d'entre eux car ils travaillent directement sur le support, le graphique et à un seul niveau. J'ai préféré introduire la notion d'"image logique" pour faciliter la composition.
Maintenant, le programme "lissajous" exécuté sous le contrôle de la commande "lpgrp" produit l'image ci-dessous par interprétation des sorties préfixées du caractère "$" de la liste-image ci-dessus en lançant la commande :
--> lpgrp lissajous
Ce
programme "lissajous.f" aurait pu être écrit par un élève
dans le langage de son choix. Il calcule les points d'une courbe de Lissajous
dont il saisit les paramètres sur le clavier. Il n'y a que des "READ (*,....)
...." et des "WRITE (*,...) ..." où le caractère
"*" indique l'entrée ou la sortie standard (stdin et stdout).
C'est
le programme encapsulé.
L'image qui suit est le compte rendu du traitement effectué par la commande encapsulatrice "lpgrp". Cette manière simplifiée et condensée de traiter le graphique a pour but de donner à l'élève la possibilité d'acquérir rapidement des notions dans l'usage de la technique graphique et d'effectuer par là même des dessins sans avoir recours à une formation spécifique sur les bibliothèques fournies avec le système, hors programme scolaire.
La zone-dialogue est la partie de la fenêtre-console qui se situe en dessous de la bande blanche séparatrice. Cette ligne séparatrice peut-être déplacée pour augmenter ou diminuer le nombre de lignes visibles. L'ascenseur sur le côté droit permet de "scroller" la zone de dialogue qui retient 500 lignes en boucle. Cela sera expliqué dans la description de la commande "lpgrp".
Le cadre de couleur bleu contient une description de la zone-dialogue de la console. Elle est activée par le caractère "?" de la bande séparatrice blanche correspondant à une aide en ligne,
en blanc sont affichées toutes les sorties standard effectuées dans le programme encapsulé par des instructions "WRITE (*,...) ...",
en couleur turquoise sont affichées toutes les commandes entrées au clavier demandées dans le programme encapsulé par des instructions "READ (*,..) ...",
en couleur magenta sont affichées les ordres graphiques condensés. Ils sont tout simplement les sorties standard "WRITE (*,...) ..." préfixées d'un mot clé et analysées par le programme encapsuleur pour exécuter des primitives graphiques simplifiées. Par défaut les commandes graphiques ne s'affichent pas dans la zone-dialogue sauf si leurs mots-clé se terminent par le caractère "*".
Bien sûr, une étape intermédiaire lui avait été proposée. Elle ne comportait pas l'aspect interactif de la console car, j'étais alors en train d'étudier les "curses" du système avant d'expérimenter les miennes "jprs".
Pour pouvoir intercepter les entrées et les sorties standard du programme encapsulé, le programme encapsuleur fait appel à un outil système Unix :
--ooOoo--