coo poo 1 3 4 evolutivite

 

1.3.4 évolutivité, souplesse

 

Meilleure évolutivité

    Comme le système est découpé en petites parties, à chaque fois qu'arrive une demande de modification, on peut mieux repérer l'endroit à toucher, aller le modifier puis tester et livrer sans avoir à gêner d'autres parties ou être gêné par d'autres modules. Les modules sont faits de telle sorte qu'il sont le plus indépendants possibles les uns par rapport aux autres et le moins couplés possible. Leur entrées et sorties sont bien normalisées et standardisées. Les frontières de chaque objet sont bien nettes et les frontières entre modules sont bien définies.

    Exemple: avant le découpage en fonctions bien distinctes(une fonction ==> une tâche, une tâche ==> un module, un module ==> un objet), les lectures étaient mélangées avec les calcul, on ne savait pas où finissent les lectures et où commencent les calcul, c'est flou, il fallait aller à l'intérieur d'une procédure linéaire les endroits précis d'intervention sans détruire le les autres parties, sans générer des bugs en cascade.

   Après le découpage en objets bien clairs:(la fonction lecture ==> un objet lecture bien défini avec base, tables données, tables paramètres, queries) on peut facilement savoir où modifier sans détruire l'aval. D'où une meilleure évolutivité du modèle orienté objets comparé à la technique de programmation procédurale linéaire. Car dans la technique de programmation procédurale linéaire (style L3G) toute intervention sur une ligne affecte toute la ligne, tout bug se propage sans barrière, toute modification en amont oblige à des modification en cascade vers l'aval, toute fonction a des frontières floues qu'il faut chercher au cas par cas. Tandis que dans un système orienté objet il y a des frontières tout autour des objets ce qui fait que tout ce qu'on touche est bien localisé, tout ce qu'on cherche est bien déjà balisé avant qu'on le cherche.

 

Exemple: lorsqu'on cherche à modifier la lecture, la lecture est déjà identifiée au préalable, nommée, créée, elle existe bien physiquement. De même lorsqu'on cherche à modifier le calcul, le calcul est déjà créé, préexistant, construit et connu comme calcul, il n'y a aucun problème pour le voir il figure en clair dans le dessin de chaîne, dans l'organigramme des traitements.

    De même lorqu'on doit toucher à la mise en forme, elle est bien localisée au préalable, bien cadrée, il n'y a pas d'ambiguité possible. Alors qu'avant la programmation orientée objets qui crée des objets (objet lecture, objet calcul, objet mise en forme) on avait tout celà (lecture, calcul, mise en forme) en tas, en vrac, tout mélangé en fouillis dans une procédure à l'intérieur de laquelle on doit se plonger au cours de chaque modification pour trouver la query à toucher.

   La technique orientée objets permet de mettre de l'ordre dans l'analyse au moment où on programme et ensuite de figer cet ordre pour plus tard. Si on a bien décomposé le traitement en objets, alors plus tard, un an après une autre personne peut toujours retrouver ces mêmes objets physiquement et bénéficier de la bonne logique inscrite au début. Si on n'utilise pas la technologie orientée objet, alors au moment où on programme, on sait où est la lecture, où elle s'arrête, où commencent les calculs, où se trouve exactement la mise en forme mais trois ans après c'est moins frais on peut avoir oublié les frontières entres différentes tâches, et quelqu'un d'autre ne parvient pas à deviner rapidement l'implantation interne des fonctionnalités, alors toute personne amenée à intervenir sur le logiciel sera obligée de se plonger dans la mer de code pour trouver ce dont elle a besoin.


    Faire de l'orienté objets c'est comme ranger ses affaires dans des armoires, des classeurs, des dossiers. Ne pas faire orienté objets c'est comme mettre toutes ses possessions dans une grande piscine: les cassettes mélangées avec les photos, les livres avec les outils, les cd avec les équipements de sport. Alors chaque fois qu'on veut écouter la musique ou sortir au gymnase ou répondre aux impôts on doit chercher les choses utiles parmi les choses pas utiles. Par opposition à la technique sauvage de mettre toutes ses possessions dans une piscine, si on les rangeait dans l'ordre par catégorie, on pourrait chercher ses affaires de sport dans la zone dédiée au sport, ses affaires de vacances dans le sac de vacances, ses papiers de loyer et impôts dans la boîte de choses administratives. C'est un peu abhérent de mélanger les k7, cd, les outils dans la même malle mais en informatique beaucoup le font quotidiennement, ils mélangent les lectures, les calculs, les mises en formes dans des programmes linéaires procédurals algorithmiques énormes qui confondent tout en une salade sans séparation des codes pour chaque fonction, sans affectation en privé des données à chaque module, sans distinguer les bases pour folios de synthèse ou pour folios de détail, les bases pour folios du trimestre ou de comparaison, les objets lecture ou calculs.

    En fait ce qu'on trouve irrationnel de faire avec ses propres affaires (tout mélanger) on le fait souvent dans son programme informatique: par exemple dans les programmes COBOL sauvages, il n'y a pas d'interdiction à plusieurs sous-programmes de partager les même zones de données.

    Une application sauvage linéaire, algorithmique, L3G non structurée-modulaire, non orientée objet peut marcher mais elle est de mauvaise qualité peu maintenable, peu évolutive. Chaque fois qu'il y a une évolution il faut changer l'algorithme et les codes partout parceque ce n'est pas décomposé en modules. Historiquement 100 % des graves bugs dans RTGE viennent de la partie COBOL batch L3G.

    La programmation structurée modulaire c'est déjà bien, la programmation orienté objet c'est mieux. Car avec l'orienté objet, les données sont privées à chaque module, la modularité est poussée plus loin, la clarté est plus nette, le lieu d'intervention pour chaque évolution est plus précis. Car un objet est beaucoup plus encapsulé qu'un simple module sous-programme d'un grand programme principal. Un module classique peut partager ses données un objet ne partage pas ses données.

 

En conclusion: un RTGE orienté objets est beaucoup plus évolutif qu'un RTGE linéaire algorithmique procédural L3G.

    La technique orientée objet est de 5 ème génération.

    Le relationnel est de 4 ème génération.

    Si on veut optimiser le relationnel (4 ème génération) il faut tendre vers la 5 ème génération (techniques orientées objets) et non pas revenir 20 ans en arrière vers l'antiquité de l'informatique, vers la 3 ème génération.

    Imaginez que vous allez faire un marathon et vous ne trouvez pas vos NIKE, que vous avez besoin d'urgence d'un prêt et vous ne trouvez pas vos papiers d'impôts. C'est pas pratique. Et pourtant en informatique, on ne range pas toujours dans l'ordre les lignes de codes programmées avec beaucoup d'efforts. Les codes qui représentent des années hommes, restent encore en vrac dans des gros programmes L3G linéaires où il faut aller rechercher séquentiellement à chaque modification.

    Si on classait les codes en en modules, en objets et classes, on peut rechercher les modifications et les erreurs en accès direct, de façon beaucoup plus rapide, plus performant, plus sûr et efficace. Un système ordonné est toujours plus convivial et compréhensible qu'un tas en vrac.

 

souplesse

  C'est la faculté de changer sans détruire.

  Un roseau est souple, on peut le courber sans le casser.

  Dans RTGE 96 si trois lignes (res.obl.) passent d'un sous total (tot.aut.pr/ch) à un autre (div.val.ajout/capi), ce changement n'affecte pas les identifiants de stockage, il touche seulement les paramètres de calcul.

  Si une ligne change de place dans l'état de sortie (déd.res.obl), ses codes d'affichage changent mais si son type de taux reste le même, son code type de taux ne change pas.

  Si une ligne change d'origine (frais personnel), son code d'origine change mais son identifiant de stockage ne change pas et les autres codes non plus.

  Si un sous total disparaît (tot.aut.pr/ch), il est supprimé de la table des totaux mais si une ligne détail disparait (soldes irrec.), cela n'affecte pas la table des totaux.

  Etant donné qu'il existe des codes d'origine, identifiants de stockage, paramètres de calcul, types de taux, codes d'affichages, cela fait au moins trois ensembles de paramètres qui peuvent être modifiés séparément selon le type de modification demandé. Et on peut modifier des paramètres spécifiques sans toucher les autres paramètres non concernés. Ce système de séparation des paramètres selon les étapes de la procédure et selon les folios permet d'avoir un minimum d'endroits à modifier, les endroits les plus précis possibles sans gêner les autres endroits non concernés.

 

La séparation des paramètres par tâche (une tâche principale ==> un ensemble de paramètres de pilotage de cette tâche) est démontrée ci dessus: si la mise en forme change, cela ne touche pas le stockage qui reste identique du point de vue paramètres comme du point de vue procédures et queries.

 

La distinction par ensembles de folios permet de modifier ce qui concerne le folio 1 et 2 sans modifier le folio 5 et 6 et vice versa. Car à partir de 96 on aura un ensemble de tables paramètres pour folios de synthèse et un ensemble de tables paramètres pour folios de détail. Et chaque modification n'est pas forcément sur les folios de détail et sur les folios de synthèse. Certaine modifications seront sur les folios de synthèse seulement et certaines seront sur les folios de détail seulement. Cette distinction allégera d'autant le volume de modifications nécessaires et les rendra plus précis, plus rapidement identifiables, plus efficaces.

 

Conclusion: un tel système de modifications précises séparées par modules et par folios permet de changer ce qui est demandé sans détruire le reste qui reste bon. Donc l'augmentation du nombre de maillons de la chaîne élève la

souplesse de l'ensemble: on peut changer les maillons séparément.

 

    Le résultat de la séparation du système de paramétrage en sous-ensembles de paramètres c'est comme lorsqu'un nunchaku est plus souple qu'un bâton et un fouet à neuf sections est plus souple qu'un nunchaku donc il peut atteindre derrière le bouclier levé