coopoo 1 3 1 modularite
1.3.1 Structuration, modularité,
indépendance, encapsulation.
Structuration:
Face
à un gros problème, on cherche à le décomposer en plusieurs petits problèmes
plus accessibles.
Dans notre cas: face à une grosse base B11 + BIS
on en fait plusieurs petites: + BF1 BD1 BD2 BF5 BD5 BF6
Modularité:
Au
lieu d'une grosse procédure linéaire, on fait plusieurs modules séparés plus
faciles à programmer et modifier.
Pour
RTGE au lieu d'avoir une seule procédure de constitution du folio 1 on la décompose
en plusieurs étapes qui sont:
1 lecture pour
charger BF1
2 calculs pour
charger BD1
et seulement après:
3
totalisations
4 mise en
forme pour charger TF1
Modularité de compréhension:
Etant
donné qu'on sépare les folios de synthèse et les folios de détail avec, pour
chaque classe ses propres caractéristiques, ses propres bases, ses propres procédures
et tables paramètres, il devient plus facile de comprendre le folio 5 sans être
gêné par ce qui ne concerne le folio 1 alors qu'auparavant les folios
partageaient les mêmes bases et tables paramètres et se trouvaient en
situation de conflit ou contagion de bugs.
Grâce
à la modularité nouvelle, deux personnes peuvent programmer les deux ensembles
(synthèse et détail) en parallèle sans avoir besoin de connaître l'autre côté
ou de l'attendre.
Modularité de protection:
L'entrée
de chaque module est protégé avec un sas propre à ce module (différent de la
porte d'entrée de l'autre module). Grâce à cet interface, on peut vérifier
la conformité des données en entrée (conformité aux standarts acceptables
par le module) et en sortie. Les données publics (connues par les modules amont
et aval) sont limitées et bien définies et ne sont pas affectées par les
variations des données privées (qui dépendent des variations de la
programmation ultérieure à l'intérieur de chaque module). Les données
faiblement variables sont bien définies (tables finales d'une tâche) et les
données fortement variables sont bien encapsulées à l'intérieur des modules
(table intermédiaires d'une tâche).
Indépendance:
On
essaie d'augmenter l'indépendance des modules les uns par rapport aux autres
pour pouvoir les développer séparément et éviter que les bugs ne noient ou
ne se propagent dans un grand volume de codes. L'indépendance vient de la
modularité et dépend du faible couplage entre modules.
Chaque
module est indépendant, il subit moins les erreurs et bugs en amont et il
envoie moins de bugs vers l'aval. Alors qu'auparavant on avait une seule procédure,
maintenant on a autant de procédures que de bases.
exemple: niveau 1 : BDR = toutes les données RTGE
niveau 2 : BF1 = folios de synthèse
BF5 = folios de détail
niveau 3 : Bd5 = période d'analyse
Bd6 = comparaison
Chaque petite procédure résultant du découpage de la
grande procédure devient plus vérifiable, plus facile à relancer et plus
rapide à retourner en cas de plantage.
Exemple 1 relance: au lieu de relancer le tout en 5
heures, on relance la partie plantée en 1 heure de temps CPU.
Exemple 2 recherche d'erreur:
au lieu de tout rescanner sur 100 queries en cas de bug, on vérifie d'abord les
10 tables permanentes en sortie des modules principaux puis les quelques queries
à l'intérieur du module boggé. La moyenne de la recherche sur 10 tables est 5
tables. La moyenne de la recherche sur les 4 queries d'un module est 2 queries.
La moyenne de la recherche sur un système décomposé en modules comme le rtge
96 est de 5 + 2 = 7 queries à vérifier alors que la moyenne de la recherche séquentielle
sur 100 queries est de 50 queries. Conclusion: au lieu de vérifier 50 queries
en moyenne en cas de bug difficile, il ne reste plus que 7 queries en moyenne à
vérifier en cas de bug difficile.
Exemple 3. localisation des interventions évolutives:
Lorqu'une ligne change de place dans un état, cela ne touche pas la lecture
donc la zone d'intervention est plus petite et plus précise qu'avant: elle se
trouve dans la partie aval avec les calculs et mise en forme.
Exemple: Lorsqu'une ligne change
d'origine (de TAB elle passe à SICOGE ou FM) cela ne touche que la partie
lecture et pas la partie mise en forme.
Ainsi le découpage préalable des fonctions facilite la
modification ultérieure.
Objet:
Un
objet c'est une procédure plus des données privées
Un
objet communique avec l'extérieur par un interface d'entrée sortie.
Dans
RTGE un objet c'est une base (exemple BD1)
plus
les queries qui la chargent.
Un
objet c'est : entrée-traitement-sortie, bien séparé des autres objets
Dans
RTGE c'est la base (base = table données + tables paramètres) plus les queries
pour cette base.
exemples de bases: BD1 BD2 BD5 BD6
Un
objet a des données privées.
Dans
RTGE chaque base BD1 BF1 BD2 BF5 BD5 BD6 a des
tables données et paramètres spécifiques.
Paragraphe
3: Encapsulation.
L'objet
a ses propres données privées non accessibles aux autres objets. Un objet a
des frontières bien nettes.
Un
objet est composé des données plus les procédures (exemple: objet BD5 =
queries QLBD5CGK + tables BP5 BA5 BT5 + table BD5 ...)
Les
données d'un objet sont distinctes des données des
autres objets contrairement aux vieux sous-programmes qui
partagent des données et donc peuvent partager des virus comme plusieurs
personnes qui mangeraient dans le même bol de soupe avec la même cuillière.
La
modernité demande que chaque module possède ses propres données où il peut
mettre ses propres bugs sans contaminer les autres et sans être contaminés par
les autres. S'il a des bugs on peut les repérer à la sortie. S'il n'a plus de
bugs on ne peut plus en réintroduire par l'entrée car elle est contrôlée.
Cela fonctionne comme dans une cantine moderne où chacun a son plateau pour éviter
les risques d'épidémies.
Dans
le nouveau RTGE 96 chaque base a ses propres tables paramètres: la BF1 a ses
BP1 BP2, la BF5 a ses BP5 BP6, chaque tâche (lecture, calcul) a ses propres
bases. Ce n'est plus comme quand on avait une seule base fourre-tout et une
seule table paramètres à l'intérieur de laquelle les folios 5, 6, 7, 8 gênaient
les folios 1 2 parceque leurs besoins respectifs étaient différents.
Dans RTGE 96 l'objet c'est la base et ses queries
Exemple : la BF1 a sa table données
BF1
ses tables paramètres
BP1 BP2 BT1 Ba2
ses queries
BF1
différentes
de celles de la BIS ou la BD1 ou la BF5
Par ce principe, les spécificités du folio 5 ne gênent
pas le travail du folio 1 et les contraintes du folio 1 ne dérangent pas les
paramètres du folio 5.
L'encapsulation
donne des frontières solides, qui stoppent les bugs à la porte d'entrée.
La porte
d'entrée unique c'est l'interface d'entrée dans un module.
L'entrée
d'un objet classique est un message qui contient des données, des paramètres ,
le nom de l'objet et les fonctions à déclencher à l'intérieur de l'objet.
L'entrée
d'un objet RTGE c'est la base en amont qui lui fournit des caractéristiques à
hériter et détermine les caractéristiques de l'objet en aval.
Par le principe d'encapsulation, les données et les procédures appartenant à une fonction sont mis à un seul endroit. Ainsi, les erreurs de cet endroit ne contaminent pas d'autres endroits, et les modifications de procédures sont bien localisées pour l'évolution future. Les données d'une fonction appartiennent en privé à cette fonction.
un module, objet, package comme la bdr ou l'état de synthèse peuvent être développés et maintenus par un spécialiste PB indépendamment d'un autre package comme l'état de détail qui sera écrit et géré par AV qui sera expert en état de détail et chaîne mensuelle. Un package bien indépendant modulaire comme l'état de synthèse pourra être donné et reproduit dans la chaîne mensuelle et réutilisé dans la chaîne annuelle sans être mélangé attaché avec le package détails.
Un package comme la constitution de la BDR peut être traité séparément par
un spécialiste M.PL sans que les autres utilisateurs spécialistes des état de
sortie M.PB et M.AV puissent avoir besoin de comprendre le fonctionnement
interne pour pouvoir utiliser cette BDR Voilà les avantages de l'encapsulation
cela rend portable et faciliment réutilisable les modules, les bouts de
logiciels, les objets, les classes, les packages.
Technique
de traçage des nouvelles frontières de modules dans RTGE 96:
1°) Frontières verticales:
*
entre folios 1 2 d'une part et 5 6 d'autre part
*
entre folio 1 et 1
*
entre folio 5 et 6
2°) Frontières horizontale:
*
entre différentes étapes de traitement pour un folio:
1 lecture, 2 calcul, 3 taux, 4 mise en forme
Conséquences des nouvelle frontières de modules:
*
Les folios 1 2 d'une part et 5 6 d'autre part n'ont plus les mêmes
tables de paramètres:
- séparation entre BA2 et BA5 (codes d'affichage différents
car maquettes différentes)
- séparation entre BT1 et BT5 (comportements différents pour les
taux)
- séparation entre BP1 et BP5 (libellés différents selon le niveau
de synthèse ou de détail).
*
Chaque étape (calcul, taux, mise en forme...) a ses propres tables
paramètres avec des spécifications et fonctionnalité différentes
diversifiées, et souples, bien adaptées au traitement spécifique de
l'étape.
Effet des nouvelles frontières de modules:
*
Chaque changement futur dans la maquette sera très précisément localisé dans
le système de paramétrage. La modification des paramètres pour l'évolution
des états sera beaucoup plus précise, simple et rapide que lorsqu'il n'y avait
qu'une seule table paramètres qui mélangeait identifiants de stockage, paramètres
de calcul et codes d'affichage et qui tenait compte simultanément de tous les
folios sur une même ligne de codes.