Application structurée

Christian Brissa
Juin 1988

Abstract

Structurer un programme permet de n'écrire qu'une fois une partie qui sera utilisée plusieurs fois ce qui facilite la maintenance du programme. Structurer une application est le même principe, plutôt que d'écrire, et de maintenir, plusieurs fois la sélection de données, il suffira de ne l'écrire qu'une seule fois.

Un peu d'histoire

La direction C2 de l'O.C.R., direction qui s'occupe du transport de personnes (OM & BC, Bus - Cars et Minibus) sera la première direction à étaler ses paiements sur l'année.

Jusque là, la perception était organisée annuellement, le gros travail commençant en octobre par la formation des listes, pour se terminer en janvier par la clôture des paiements. Le reste de l'année étant occupé par l'exploitation du fichier, listes et statistiques diverses étant fournies au Ministre, à la direction ou à l'extérieur.

C'est en 1988 que les modifications des programmes sont prévues, nouveau dessin de fichier, création de la moulinette et adaptation de 150 programmes sont nécessaires. Délais généreusement offert par l'administration pour ce faire : 3 mois.

3 mois sont un délai un peu juste.
Heureusement, les programmeurs savaient le travail à faire, certains ayant participé aux réunions de travail préliminaires à la création de l'A.R. obligatoire, le fichier est dessiné avant l'annonce officielle du travail, la moulinette écrite et testée avant que ce dessin soit officiellement accepté.

L'idée m'est venue, je ne sais plus trop comment, de saucissonner les programmes ; j'utilisais déjà les paramètres pour les recherches, cette idée s'est vite imposée comme la seule qui permette de garantir un travail rapide.

On ramènera toutes ces valeurs à :

25 programmes à écrire au lieu de 147, on a déjà bien gagné sa journée.

Structurer

Programme structuré

Les principaux objectifs de la programmation structurée sont les suivants :

Source : Université Laval, Formation1-cobol, Immed Jarras (pdf)

Application structurée

Les principaux objectifs de la structuration d'une application sont les suivants :

Les objectifs sont identiques à un détail près : structurer une application augmente la capacité d'interroger le fichier de base.

Au travail

Fichier

Étaler le travail sur l'année au lieu de le conserver concentré sur 3 mois ne peut se faire qu'à la condition de remplacer le paiement annuel à date fixe par un paiement annuel à une date anniversaire, la date d'immatriculation par exemple. C'est ce qui a été fait.

Second changement important, une première à l'O.C.R., si le trop perçu n'est pas (encore) remboursé, il est déduit des futures sommes à payer. Sous certaines conditions, bien sûr.

C'est le premier travail à effectuer.

Le nouveau fichier comportera des dates (demande de paiement, rappel éventuel, paiement, validité de l'autorisation, etc.) et des montants (demandé, payé, solde éventuel, etc.) que l'ancien ne connaissait pas. An 2000 oblige, les dates sont déjà prévues en 8 caractères. Dernière particularité de la description du fichier, elle est plus longue que le fichier lui-même… La normalisation des noms est possible grâce à l'appel d'une routine ASSEMBLER après quelques MOVE. Pour éviter cette douzaine d'instructions, le fichier est dessiné avec, à la fin, les zones nécessaires au CALL et les 32 caractères indispensables à la réponses.

Moulinette

La moulinette, simple outil de transformation de format, doit prévoir la somme à payer. C'est, à peu près, le seul calcul.

C'est le second travail à effectuer.

Et si le dessin du fichier n'est pas accepté, tu auras travaillé pour rien.
Non.
À moins que je sois totalement con, ce que je ne pense pas du tout (même si c'est possible), le dessin proposé correspond à la demande telle que je l'ai comprise. Et si j'ai mal compris, tout ne sera pas à refaire.

Explications.

Il n'y aura pas d'item inutile puisqu'ils viennent de l'ancien dessin.
Il pourrait en manquer ?
Oui.
Si c'est le cas, il faut modifier le dessin du fichier et écraser l'ancienne version par la nouvelle, modifier la moulinette et compiler les programmes déjà écrits. C'est tout.
La zone manquante n'a jamais été utilisée (sinon, je me serais aperçu de son absence), ça s'arrête là, le programme déjà écrit tournera avec le nouveau dessin.

Dessiner le fichier, programmer la moulinette, OK, on peut commencer sans attendre la réunion sur le dessin.

Programmes

Pour réduire le nombre de programmes à écrire, il faut examiner la structure des programmes existants. Cette structure est assez simple et, généralement, standard.

Les étapes d'un programme
listes / rapports / statistiques / virements

LST RPT STA VIR
utilisé dans C2 O N O N
sélectionner O O O O
trier O O N/O O
imprimer O O O O

Le tableau est clair, en dehors des statistiques qui n'imposent pas un tri, les étapes d'un programme sont les mêmes pour tous, on imprime après avoir trié ce qu'on a sélectionné.

Pourquoi ne pas lier VIR et LST ?
Les virements sont une triple impression, la liste, la facture et le bulletin lui-même, la partie PRNT sera totalement différente.

À l'O.C.R., le Report de COBOL n'était pas utilisé, c'est dommage, quant aux virements, ils étaient imprimés aux Finances.

Structurer l'application, gagner du temps en simplifiant grandement le travail, consistera à séparer la sélection, le tri et l'impression.
C'est simple.
Reste à le faire.

Le code qui suit ne respecte pas les colonnes de COBOL et ce, simplement parce que LaTeX n'a pas les 80 colonnes nécessaires.

C2STA01

147 programmes d'exploitation à écrire et le premier à y passer est un programme de statistiques. Avant même le programme de sélection.
Pourquoi ?
La réponse tient en peu de mots :

Ça vous semble bizarre ?
Pas à moi.
Une dizaine de formats de mise en page pour les statistiques doivent se ramener à une dizaine de programmes d'impression.
Une dizaine de programmes d'impression, cela signifie que certaines données ne peuvent être programmées, elles devront être variables et, partant, être paramétrées.

Le premier programme écrit le sera avec deux idées bien différentes en tête, chaque idée étant traitée au bon moment :

  1. avoir une apparence correcte, sans égard aux résultats affichés ;
  2. avoir des résultats exacts, l'apparence n'est plus un souci.
Titre de l'impression

Ophain-Bois-Seigneur-Isaac-lez-Nivelles est un nom de commune un peu plus long que Huy. Si l'impression veut être agréable à l’œil, il faut centrer le titre, « Immatriculations à Huy » ne se place pas au même endroit que pour l'autre commune.

Code programme, code carte, il reste environ 72 caractères pour le titre. Il suffit de compter le nombre de caractères blancs à l'arrière du titre pour en savoir la longueur. Si la zone dans laquelle on a recopié la carte est une table on centre facilement sur la ligne d'impression du titre (L02-TITRE) et on souligne de la même manière et en même temps (L03-TITRE).

  05          TITRE-WS         PIC X(72)             VALUE 'C2STA01'.
  05          FILLER           REDEFINES  TITRE-WS.
    10        CARACTERE-WS     PIC X                 OCCURS 72.
  05 L2.
    10        FILLER           PIC X.
    10        FILLER           PIC X(30)             VALUE SPACE.
    10        L02-CARACTERE    PIC X                 OCCURS 72.

TITRE-WS est initialisé avec le nom du programme pour le cas où la carte titre manquerait.

Nom du destinataire

J'ai toujours eu pour habitude de mettre mon nom sur les impressions, histoire d'éviter de voir mes tests partir par la poste en direction d'un client. L'endroit prédestiné pour ça, la première ligne, L01-NOM, initialisé avec nom, local et n° de téléphone, verra son contenu remplacé par celui du demandeur. Si la carte est manquante, le résultat me sera envoyé, le client recherché, le batch relancé après correction.
Ma ligne de titre, L01 standard.

  05 L01.
    10        FILLER           PIC X.
    10        L01-NOM          PIC X(96)
    VALUE 'BRISCHRI - A L*ETAGE - 6511'.
    10        L01-DATE         PIC X(28).
    10        L01-PAGE         PIC -(6)9.
    10        FILLER           PIC X                 VALUE '-'.

Ceux qui se demandent pourquoi tous mes programmes contiennent la ligne

TRANSFORM L01-NOM        FROM '*'            TO QUOTE

devraient avoir compris maintenant : dans L01-NOM les apostrophes sont remplacées par des astérisques, ça évite de compter la longueur de la zone avant l'apostrophe, d'ajouter un FILLER PIC X VALUE QUOTE et de terminer par ce qu'il reste des 96 caractères.

Langue de la demande

La Belgique a la chance d'être un pays polyglotte où la langue de chacun est respectée. Les langues nationales sont, par ordre alphabétique, l'allemand, le français et le néerlandais, pour ne pas compliquer les choses, on y ajoutera l'anglais.

Demander à sav