coo poo 1 3 6 5 polymorphisme
5.polymorphisme
* Dans un folio, le polymorphisme permet de
- traiter toutes les lectures en une seule query au lieu de
12
- traiter tous les calculs en une seule query au lieu de 12
- traiter tous les totaux du folio 5 en une seule query au
lieu de 12
- traiter toutes les mises en forme en une seule query
au lieu de 12
- faire le niveau siège d'un folio en 4 tâches, 4 queries
principales
au lieu de 4
fois 12 tâches.
* Au départ de l'analyse le polymorphisme permet de considérer
une tâche, une action, une fonction comme un tout, une seule query, un seul
objet sans se soucier des variances internes.
exemples: au niveau global de l'analyse:
- considérer la tâche 'lecture' comme un tout sans se
soucier des
6 types de
lectures qui sont compris dans la fonction lecture.
- considérer la tâche 'calcul' comme un tout sans de
soucier des
4 types de
calculs à l'intérieur de l'objet calcul.
- considérer la tâche 'totalisations' comme un tout, un
module entier
sans se
soucier des 3 types de totaux.
- considérer la tâche 'mise en forme' comme un tout sans
rentrer dans les
détails des
2 types de mise en forme.
Donc les tâches 'lecture', 'calcul', 'totaux','mise en
forme' sont des modules entiers, polymorphes, des objets bien définis qu'on
peut manipuler en entier sans avoir besoin d'entrer dans les détails tout en
sachant qu'il contiennent bien en eux différentes façons de faire des
lectures, calculs, totaux. En fait on sait qu'ils savent lire toutes les lignes,
calculer tous les taux, sommer tous les totaux mais on ne l'explicite pas à un
niveau haut de l'analyse.
Avantage du polymorphisme:
Cela permet de faire de l'analyse au niveau haut très juste, très définitive,
très claire et précise qu'on ne retouche jamais et qui reste toujours juste
quels que soient les développements futurs et décisions et choix ultérieurs
pris au moment du développement.
Comment
est ce possible de rester toujours juste alors que les décisions futures ne
sont pas encore prises? Parce que c'est polymorphe: par exemple la lecture dans
RTGE 96 est polymorphe donc quel que soit le type de lecture ou la variance de
lecture ou le nombre de nouvelles façon de faire les lectures ça sera toujours
de la lecture donc ça restera toujours l'objet lecture qui se trouve au début
du traitement avant le calcul et avant la création de la base pour les folios
de synthèse.
Par
cette méthode, chaque schéma, dessin, graphe, analyse organique, dictionnaire
de données, document de départ au niveau haut restera juste très longtemps à
travers beaucoup de développements et décisions variées car l'analyse se définit
et s'affine par étages, par niveaux d'abstractions successifs.
Chaque
niveau d'abstraction inférieur vient préciser, compléter, éclaircir le
niveau supérieur sans jamais le contredire car le niveau supérieur intègre
suffisamment d'abstraction, est suffisamment polymorphe pour qu'on puisse tout
mettre dans le niveau inférieur sans contredire le niveau d'abstraction supérieur
qui reste général.
Exemple 1. totaux:
Dans
l'analyse RTGE 96 de niveau haut, quand on désigne la tâche totalisations par
un rectangle après le calcul de lignes détails et avant la mise en forme,
c'est juste, ça ne changera jamais, les totaux ne passeront jamais derrière
les mises en forme ou devant les lectures. Par contre, à l'intérieur de la tâche
'totaux' il peut y avoir une seule query (polymorphe de 4 select) comme dans le
folio 5 ou bien on peut trouver une cascade de plusieurs queries comme dans le
folio 1.
Exemple 2. calcul:
La tâche
de 'calcul' est polymorphe parce qu'elle peut traiter 4 types de taux à la
fois. C'est simple vu de l'extérieur, et c'est juste.
Cela permet d'avoir de l'analyse toujours juste et propre même
quand ça évolue.
Exemple 3. taux:
En
cas de modification dans les types de taux, le concept de calcul de taux ne
change pas il est toujours au même endroit avec le même nom, c'est seulement
l'intérieur qui change.
Exemple 4. sous-totaux:
En
cas de changement de calcul de totaux, (plusieurs lignes changent de
sous-totaux, quittent un sous total pour aller dans un autre) , la query
totalisation vue de l'extérieur ne change pas, parfois même les SELECT de la
query ne sont pas augmentés ou diminués mais c'est à l'intérieur que cela
change.
En cas de changement de paramètres de calcul, la lecture
ne change pas, seuls les paramètres changent, et les identifiants de stockage
ne changent pas.
Exemple 5. Polymorphisme et paramétrage:
Quand
la totalisation du folio 5 n'est pas polymorphe, il faut 12 queries de
totalisation pour faire 12 lignes totaux. Lorsque les calculs de totaux (SELECT)
sont regroupés dans un module de totalisation polymorphe (BS5) paramétré
(BP8), il ne reste plus qu'une seule query (BS5) au lieu de 12 queries. Le
polymorphisme permet à une query de faire plusieurs types de totaux (plusieurs
SELECT réunis par des UNION). A l'intérieur d'un type de total (à l'intérieur
d'un SELECT) des lignes diverses sont traitées en même temps grâce à la
jointure avec une table de paramètres (BP8).
Par
exemple le polymorphisme permet de traiter 3 types de totaux, puis à l'intérieur
de chaque type de totaux, le paramétrage permet de traiter 4 lignes. Par conséquent,
le polymorphisme combiné au paramétrage permet de traiter simultanément 3 * 4
= 12 lignes en une seule query composée de 3 SELECT réunis par des UNION et
joints à une table de paramètres de totalisation (BP8). Voilà comment on peut
combiner plusieurs techniques d'optimisation. Le paramétrage peut également être
considéré comme un moyen de rendre le module polymorphe (comme l'UNION de
plusieurs SELECT en parallèle).
(remarque:
d'habitude en COBOL on met plusieurs objets fils dans un objet parent et on déclenche
l'un ou l'autre objet fils par PERFORM selon le message paramétré que l'on
passe à l'objet parent au moment de son appel par CALL).
Conclusion du polymorphisme:
Ainsi
en approchant l'application par les concepts de lecture, calcul, totalisation,
on manipule des objets polymorphes généraux qui ne changent pas leur aspect
extérieur avec le temps qui passe (les organigrammes, procédures, CLIST sont
les mêmes et toujours valables), seuls les détails changent. Donc la compréhension
globale est facilitée par le polymorphisme des modules, et la conception est
simplifiée, stabilisée, perennifiée, solide..
tâche
conceptualisée polymorphe ===> analyse
simple, correcte
--------------------------------------------------------------------
Chaque query peut avoir plusieurs selects, chaque select a des dizaines de paramètres selon l'endroit ainsi le polymorphisme peut passer en déclenchant tel select de la query ou tel paramètre du select
Chaque classe peut contenir plusieurs objets, chaque objet contient plusieurs méthodes et paramètres ainsi on peut déclencher tel objet de la classe, telle méthode de l'objet et utiliser plusieurs paramètres
Le polymorphisme vient du fait que la classe générique peut traiter une multitude de cas spécifiques
plusieurs
formes de calcul
plusieurs
types de totaux