La modularisation
Note: |
ce document est dû en grande partie à mon collègue
Vincent Echelard. |
La technique de développement graduel
Qu'est-ce que le développement graduel ?
C'est une technique de développement qui nous permettra
de construire des algorithmes beaucoup plus complexes que ceux que nous avons
bâtis jusqu'à présent et qui nous permettra d'aborder le
concept de modularisation. Cette méthode est connue sous plusieurs appellations,
dont celles “d'approche TOP / DOWN” ou encore de “raffinement
graduel”. Cette dernière appellation image bien le principe de
développement qui sera ici présenté.
Le principe de base de cette méthode est d'aborder le problème
à résoudre de la façon la plus générale
possible, en évitant soigneusement de tenter de résoudre immédiatement
les détails du problème. Nous produirons donc tout d'abord un
algorithme "général" qui utilisera des "instructions" générales
(complexes). À l'étape suivante, nous tenterons d'aborder
le problème d'une façon plus détaillée ; nous
raffinerons donc l'algorithme obtenu à l'étape précédente
en simplifiant les instructions complexes qui auront été utilisées.
Il est très possible que l'algorithme obtenu à la fin de cette
deuxième étape ne soit pas encore suffisamment détaillé
pour être codifié en langage. Dans ce cas il faudra recommencer
l'étape de raffinement tant et aussi longtemps que l'algorithme contiendra
des instructions qui sont trop complexes pour être codifiées.
Exemple: écrire le pseudo-code et le programme qui permet
d'afficher la figure ci-dessous.
********
********
********
********
********
********
********
********
********
********
|
Étape I : on aborde
le problème de la façon la plus générale possible
Pseudo-code de l'algorithme à l'étape
I
Étape II : on raffine
notre vision du problème en augmentant le niveau de détail
Pseudo-code de l'algorithme à l'étape
II
[Dessiner un rectangle à l'écran]
MAX_LIGNE <-- 10
Cpt_Ligne <--1
Tant que Cpt_Ligne <= MAX_LIGNE
[Dessiner une ligne]
Changer de ligne
Cpt_Ligne <--Cpt_Ligne + 1
|
 |
Note: |
jusqu'à présent, cette solution est générale,
au sens où elle peut s'appliquer à n'importe quel problème
où l'on doit illustrer une figure en deux dimensions. |
Étape III : on raffine
encore notre vision du problème en augmentant le niveau de détail
********
********
********
********
********
********
********
********
********
********
|
 |
Pseudo-code de l'algorithme à l'étape
III
MAX_LIGNE <-- 10
Cpt_Ligne <-- 1
Tant que Cpt_Ligne <= MAX_LIGNE
[Dessiner une ligne]
Changer de ligne
Cpt_Ligne <-- Cpt_Ligne + 1
|
 |
[Dessiner une ligne]
MAX_CAR <-- 8
Cpt_Car <-- 1
Tant que Cpt_Car <= MAX_CAR
Ecrire "*"
Cpt_Car <-- Cpt_Car + 1
|
Étape IV : On intègre les différents morceaux de l'algorithme
Pseudo-code de l'algorithme à l'étape
IV
|
MAX_LIGNE <-- 10
MAX_CAR <-- 8
Cpt_Ligne <-- 1
Tant que Cpt_Ligne <= MAX_LIGNE
Cpt_Car <-- 1
Tant que Cpt_Car <= MAX_CAR
Ecrire "*"
Cpt_Car <-- Cpt_Car + 1
Changer_de_ligne
Cpt_Ligne <-- Cpt_Ligne + 1
|
Programme C++ équivalent à l'algorithme à l'étape
IV
#include <iostream> //Les fonctions d'entrées/sorties
using namespace std; //Formule magique
void main() // Programme principal
{
const int MAX_LIGNE = 10; // Nb de lignes
const int MAX_CAR = 8; // Nb de caractères sur une ligne
int Cpt_Ligne; // Compteur de ligne
int Cpt_Car; // Compteur de caractères
Cpt_Ligne = 1;
while (Cpt_Ligne <= MAX_LIGNE) // Écriture des lignes
{
Cpt_Car = 1;
while (Cpt_Car <= MAX_CAR) // Écriture des caractères d'une ligne
{
cout << "*"; // Écriture d'un caractère
Cpt_Car = Cpt_Car + 1;
}
cout << endl; // Changer de ligne
Cpt_Ligne = Cpt_Ligne + 1;
}
} // Fin du programme