par , 01/04/2023 à 20h00 (1012 Affichages)
■ ■ ■ SOMMAIRE DU BILLET ■ ■ ■
- Norme ISO 5807 (méthode sauvage des années 60)
- CORIG - COnception et Réalisation de l’Informatique de Gestion
- LCP - Logique de Construction de Programme
- PS - Programmation Structurée
- Conclusion
Ce billet évoque les méthodologies des années 70 et réhabilite la méthodologie LCP (Logique de Conception de Programme) conçue par Jean-Dominique Warnier, ingénieur chez Bull.
Chacun interprète mon propos avec sa grille de lecture et prend ce qui l’intéresse ou passe son chemin.
La plupart des utilisateurs et des visiteurs passent leur chemin. Je ne décèle pratiquement aucune connexion sur les liens que je propose pour en savoir plus.
§ 01 : ■ Norme ISO 5807 (méthode sauvage des années 60)
![Nom : Logo Norme ISO 5807.jpg
Affichages : 291
Taille : 13,2 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=614065&d=1645299134)
Sur le site DVP, il n’y a qu’un seul tutoriel d’initiation à l’algorithmique permettant d’apprendre le concept d’algorigramme en tant qu’outil visuel pour décrire un algorithme :
Ce tutoriel se réfère à la norme ISO 5807 qui bien qu’elle date du 15 février 1985, s’inspire de la programmation sauvage qui se pratiquait dans les années 60 à l’aide du normographe Bocianelli en plastique orange.
![Nom : Normographe ou Organigraphe (40%).jpg
Affichages : 142
Taille : 78,7 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=645603&d=1698073903)
Mais La norme ISO 5807 n’est pas une méthode de programmation, c’est un ensemble de symboles de traitement et de logique représentant chacun une instruction ou un ensemble d’instructions :
- Symbole général « traitement » : Opération ou groupe d’opérations sur des données, instructions, etc.
- Fonction de sous-programme : Portion de programme considérée comme une simple opération.
- Entrée – Sortie : Mise à disposition d’une information à traiter ou enregistrement d’une information traitée.
- Préparation : Opération qui détermine partiellement ou complètement la voie à suivre dans un embranchement ou un sous-programme. Symbole également utilisé pour préparer une décision ou mettre un aiguillage en position.
- Embranchement : Exploitation de conditions variables impliquant le choix d'une voie parmi plusieurs. Symbole couramment utilisé pour représenter une décision ou un aiguillage.
Cette norme interprète le codage sans règle particulière de raisonnement, elle ne symbolise pas une réflexion indépendante du langage résultant d’un raisonnement méthodique. C’est comme s’exprimer en mode prose (forme ordinaire du discours qui n’est soumise à aucune règle) plutôt qu’en mode poésie (forme des mots disant plus qu'eux-mêmes par leur choix (sens et sonorités) et leur agencement (rythmes, métrique, figures de style).
Sur le site de Christophe Darmangeat : ALGORITHMIQUE ET PROGRAMMATION POUR NON-MATHEUX, je lis à propos d’algorigramme :
Avec quelles conventions écrit-on un algorithme ?
Historiquement, plusieurs types de notations ont représenté des algorithmes.
Il y a eu notamment une représentation graphique, avec des carrés, des losanges, etc. qu’on appelait des organigrammes. Aujourd’hui, cette représentation est quasiment abandonnée, pour deux raisons :
- D’abord, parce que dès que l’algorithme commence à grossir un peu, ce n’est plus pratique du tout.
- Ensuite parce que cette représentation favorise le glissement vers un certain type de programmation, dite non structurée, que l’on tente au contraire d’éviter.
|
L’auteur fait sans doute allusion à cette norme ISO 5807.
Que sont devenues les méthodologies CORIG, LCP et PS des années 70 ?
Aux oubliettes, les travaux de J-D Warnier, ses FLE et FLS, sa structure hiérarchisée du programme et ses structures types : répétitives et alternatives !
Symbolisme de la Norme ISO 5807
![Nom : Symboles Norme ISO 5807.jpg
Affichages : 367
Taille : 155,3 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=614066&d=1645299628)
§ 02 : ■ CORIG - COnception et Réalisation de l’Informatique de Gestion
![Nom : Logo CORIG.jpg
Affichages : 276
Taille : 16,7 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=609037&d=1637520165)
Les principes de CORIG sont simples : il s'agit d'une écriture linéaire des programmes. Ceux-ci sont découpés en sous-fonctions comme avec la méthode des arbres programmatiques mais au lieu d'avoir au début de la partie « instructions » du programme l'appel de chaque sous-fonction de façon hiérarchique (en suivant les niveaux d'imbrications déterminés par la représentation de l'arbre), toutes les sous-fonctions sont écrites en série sous forme de « briques » fonctionnelles. La brique fonctionnelle est constituée de trois parties distinctes :
- une condition d'exécution
- la sous-fonction proprement dite
- le label de fin de l'unité fonctionnelle
En premier lieu c'est la condition d'exécution qui est testée. Si la condition est remplie le programme se poursuit en séquence. Dans le cas où la condition n'est pas vérifiée le programme effectue un saut jusqu'à la fin de l'unité fonctionnelle. Il est très important que ce saut s'effectue à la fin de l'unité courante et non au début de l'unité fonctionnelle suivante car ceci permet que chaque brique fonctionnelle soit indépendante des autres.
Un langage de variables, accessible à tous les développeurs, est proposé :
- PE pour Premier Enregistrement,
- DE pour Dernier Enregistrement,
- VE, pour Vecteur Erreur,
- VP, pour Vecteur de Présence,
- CF pour ConFiguration,
- OC pour occurrence,
- FT pour Fin de Travail,
- etc.
Un dictionnaire est créé, qui contient :
- des rubriques codées,
- des états,
- des fichiers,
- des enregistrements,
- des tâches qui décrivent l’application.
Liens :
§ 03 : ■ LCP - Logique de Construction de Programme
![Nom : Logo LCP.jpg
Affichages : 275
Taille : 18,5 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=609036&d=1637520151)
Et que dit LCP ? Raisonner en termes d’actions et non en termes de conditions.
« Penser hiérarchiquement par traitements, autrement dit : raisonner du plus global vers le plus détaillé, par décompositions hiérarchiques successives sur la base des actions et non sur celle des conditions ». |
LCP est sans équivoque, indépendant du langage. Que le langage utilisé soit structuré (utilisant des instructions de type structure de bloc) ou non, le programme est lui, toujours structuré.
Les règles et principes fondamentaux de la méthodologie sont toujours efficients mais sa pédagogie avec son formalisme dédié au langage des ensembles gagnerait à être actualisée en y intégrant les technologies d’aujourd’hui comme les SGBD par exemple.
Nous ne sommes peut-être plus que trois inconditionnels de LCP :
- Serge MENEUT : La logique informatique (selon les travaux de J-D WARNIER)
Le blog de Serge MENEUT est dédié à l’ensemble de l’œuvre de J-D Warnier.
- M. TOURNEUR : Logique de Construction des Programmes (1971)
Le blog de M. Tourneur est la transcription « brute » et parfois incorrecte d’un tutoriel LCP des années 70. À partir de son blog, j’ai créé un billet :
- et moi : APL-AML
Ayant conservé un tutoriel original LCP de 140 pages datant de 1971, J’envisage de le transcrire intégralement sur le site. Dans l’immédiat, j’en ai déjà réalisé une synthèse dans un billet :
C'est au début des années 1970 que Jean-Dominique WARNIER, alors ingénieur informaticien chez Bull, propose ses méthodes novatrices en matière d'organisation, de structuration et de conception des systèmes informatiques. Il fut lauréat en 1974 de l'Engineer And Scientist Award. On lui doit la fameuse méthode L.C.P. (Logique de Construction de Programmes) qui s'apparente bien plus à une méthode d'analyse qu'à une méthode de programmation. Le principe de la méthode LCP est d'effectuer une analyse séparée des FLE et des FLS, les Fichiers Logiques d'Entrée et les Fichiers Logiques de Sortie. Ce sont en fait les données en sortie qui vont conditionner les données en entrée. Les bases de cette méthode apportent une approche logique de la conception d'applications. C'est d'ailleurs cette méthode LCP qui se retrouve à la source de plusieurs autres méthodes plus évoluées ou de générateurs d'applications automatiques. L'œuvre de J-D Warnier a eu un impact au niveau mondial qui marque encore les sciences informatiques et a laissé son empreinte dans le Génie logiciel et les approches Objet.
La méthodologie LCP instaure les règles et principes d’une démarche structurée. Les structures de base de la représentation graphique LCP sont simples (itérative, alternative), pratiques à réaliser et faciles à comprendre. La complexité d’un algorigramme ne dépend que de la capacité d’abstraction du programmeur.
L’algorigramme se lit naturellement de haut en bas et de gauche à droite. Mais il n’a pas besoin d’exister concrètement sur une feuille de papier ou sur un écran ; avec un minimum de pratique, le développeur structure mentalement sa programmation.
L’apprentissage de la méthode suppose une détermination et une réflexion intense pour révéler et s’approprier le non-dit de la pédagogie. Derrière les mots, les règles et les principes, le comment, la recette, il y a le pourquoi, une démarche mentale à déchiffrer, à acquérir et à imprimer dans notre mémoire procédurale.
La structuration des FLS/FLE/PRG codifiée par LCP, formate inconsciemment la structuration mentale du développeur, laquelle impacte tous les aspects du développement :
- la création des tables de la BDD,
- les attributs dans les tables,
- la conception des écrans et des états,
- la fonctionnalité dans le programme, le programme dans l’application,
- l’organisation de l’application (menu).
Cette réflexion nourrie par l’exploration de différentes typologies de programmes, participe à l’élaboration d’un AGL contribuant au développement « industriel » de programmes.
Mélange de plusieurs Méthodes de Programmation
Il est possible d'intégrer quelques éléments empruntés à la méthode CORIG pour rendre le programme plus structuré en codant chaque paragraphe en tant que brique indépendante. Notamment lorsqu’il s’agit de programmes de contrôle utilisant les VE et VP de CORIG.
Modélisation et LCP
Bien que je connaisse parfaitement les modèles classiques de conceptualisation (MCD et MCT), je n’ai jamais eu besoin d’y recourir pour développer mes applications. Mon formatage mental LCP en est un substitut performant. Comment Modélisation et LCP interagissent-elles dans ma démarche conceptuelle ? Je tente d’apporter quelques éléments de réponse dans mon blog APL-AML.
Liens :
§ 04 : ■ PS - Programmation Structurée
![Nom : Logo PS.jpg
Affichages : 308
Taille : 12,5 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=603647&d=1629483808)
C'est souvent le terme de Programmation Structurée qui revient quand on décrit cette méthode, ce qui crée une confusion avec la méthode LCP elle-même une méthode de programmation structurée et antérieure de plusieurs années à la PS prêchée par Marie-Thérèse Bertini et Yves Tallineau. La méthode des arbres programmatiques serait un nom plus approprié.
Cette méthode nous vient du mathématicien et informaticien néerlandais Edsger Wybe Dijkstr qui a publié « Programming Considered as a Human Activity », en 1965.
Le Cobol met à disposition des programmeurs l'instruction GO TO qui permet de se débrancher à un autre endroit du programme. Mais, mal utilisée, cette instruction peut rendre un programme complexe et désorganisé. La méthode de Jackson préconise donc l'interdiction du GO TO. Alors comment faire ?
Le programme est structuré en niveaux. Chaque niveau est constitué d'un début, d'une fin, et d'une répétitive (ou d'une alternative) qui se trouve entre le début et la fin. Il est possible d'en avoir plusieurs mais le début et la fin sont uniques.
Le début n'est exécuté qu'une seule fois. La fin est elle aussi exécutée une seule fois. La répétitive se contente d'appeler le niveau inférieur jusqu'à ce que la condition d'arrêt soit vérifiée. Et tout se passe dans des sous-programmes appelés par des PERFORM.
Pour ce qui concerne l'alternative c'est exactement la même chose. Un PERFORM d'une procédure est réalisé dans le cas où la condition est vraie et un PERFORM d'une autre procédure est effectué dans le cas contraire.
Cette méthode n’est pratique qu’à partir du moment où l’on a dessiné l'arbre programmatique. Sans le dessin de l'arbre le programme est aussi complexe qu'un programme écrit sans méthode. Le gros inconvénient est de toujours avoir à se promener de haut en bas et en large et en travers quand on lit le programme.
Pour toute modification du programme il faut commencer par modifier l'arbre programmatique. C'est un repère visuel très pratique pour savoir à quel endroit positionner un traitement particulier. Si par exemple un nouveau total doit être fait il suffit de se poser la question concernant le niveau de cette nouvelle variable. Est-ce une totalisation de niveau client, de niveau rayon, de niveau article ? La réponse indique d'elle même à quel endroit positionner l'initialisation de la variable de cumul.
La Programmation Structurée n’a recours qu’à des structures de bloc qui se présentent ainsi :
Si condition
Instructions
Sinon
Instructions
FinSi
Ou
TantQue Condition
Instructions
FinTantQue
Autrement dit, bien qu’elle soit prétendument indépendante du langage, la Programmation Structurée est assujettie à des structures de bloc, lesquelles gouvernent la réflexion en termes de conditions.
L’arbre programmatique qui représente graphiquement un algorithme, est loin d’être pratique aussi bien à réaliser qu’à lire. Il se lit de la droite vers la gauche et doit être retourné de 90 degrés dans le sens inverse des aiguilles d'une montre pour obtenir les blocs « DÉBUT » au dessus des blocs « FIN ».
C’est en fait l’association de deux représentations graphiques que propose la pédagogie LCP avec son diagramme d’accolades et son algorigramme.
Symbolisme de l'Arbre Programmatique
![Nom : Symboles Arbre Programmatique.jpg
Affichages : 309
Taille : 39,3 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=614067&d=1645299982)
Liens :
§ 05 : ■ Conclusion
La différence énorme entre Programmation Structurée et Programmation LCP tient au raisonnement qui dans le premier cas fonctionne en termes de conditions et dans le second cas, fonctionne en termes d’actions.
Ce qu'apporte la méthode Warnier en programmation ?
- des programmes clairs et facilement transformables + (zéro faute), (LCP)
- des Bases de Données d’une clarté limpide et facilement modifiable, (LCS, LCO)
Quoi de plus satisfaisant que de faire en sachant ce que l'on fait ! (J-D Warnier) |
Ce qu'il faut retenir de la méthode Warnier, et de toutes les autres méthodes de programmation, se résume en trois points :
- l’analyse de la structure des données de sortie permet de construire la structure des données d’entrées d’un programme,
- la structure du programme correspond très exactement à la structure des données d’entrées,
- toute procédure peut s’exprimer avec trois structures élémentaires qui sont la séquence, la répétitive et l'alternative.
Mais l’apport de la méthode Warnier concerne aussi l’action même de programmer, et surtout de programmer efficace pour obtenir un programme performant, fiable et évolutif. Ceci consiste à :
- Concevoir la structure du programme,
- Programmer les instructions nécessaires à leur juste place.
Cet aspect de l’apport de Warnier est fondamental. Appliquée à la lettre, la démarche entraînerait une lourdeur qui ne se justifie pas. Il faut savoir se libérer des artifices pédagogiques comme son formalisme dédié au langage des ensembles ; il faut assimiler et s’approprier mentalement les règles et principes de base pour devenir autonome et responsable.
L’apprentissage de la structuration de chaque type de programme structure progressivement et durablement la réflexion. C’est l’autre aspect de l’apport de Warnier. Le développeur LCP est en capacité de concevoir et réaliser sans avoir besoin de modéliser.
« D'autres penseurs vont imaginer différentes méthodes qui possèdent chacune leurs avantages et leurs inconvénients. À chacun de choisir sa méthode préférée. L'important est d’en choisir une, de s’attacher à la suivre pour rendre le développement "industriel" de programmes .
Le programmeur qui utilise une méthode n'a plus à se reposer sans cesse les mêmes questions d'un programme à l'autre. Après seulement quelques programmes réalisés il aura ses modèles, ses squelettes types, en fonction du type de programme à écrire. » Méthodes de programmation - Didier Genevois |
Je consacre plusieurs billets de mon blog APL-AML à concrétiser ces belles paroles.