Académique Documents
Professionnel Documents
Culture Documents
IV-1- La modularité
Sans modularité
160 actions 120 Actions 140 Actions
ALGORITHME Algo1 ALGORITHME Algo2 ALGORITHME Algo3
Bloc B
Bloc B
Bloc C Bloc C
Bloc A
Bloc A
Bloc B Bloc B
Bloc B
Fin Fin Fin
Construction séparée :
Avec modularité :
1
2- trouver la solution d’un problème une seule fois et une seule car dés qu’un module
qui effectue un travail bien particulier est construit, tester et enregistrer on peut le
réutiliser à chaque que l’on souhaite
La modularité est donc la division d’un logiciel en modules (ou sous programmes) ayant
une INTERFACE DEFINIE et un MECANISME qui assure la communication entre les
différents modules.
Sur le plan syntaxique, un module est un ensemble d’actions primitives ADJACENTES,
avec une frontière bien définie. Il est identifie par un nom, qui permet de l’appeler.
Le bute du module est de recevoir des données d’entrées (0 à N) d’effectuer un traitement
sur ces données et de retrouver des résultats.
Type de module
Rôle du module
Exemple :
Fonction
X : entier
PREM Booléen
Fonction
(0, N) entrées
NOM 1 sortie (objet élémentaire)
Rôle : ……………………..
Procédure
(0, N) entrées
NOM (0, N) sorties
Rôle : ……………………..
2
Exemple :
Fonction
Fonction
Fonction
M : entier
PPCM Entier
N : entier
PROCEDURE
A : réel
N : Entier
B : réel
EQU 2 X1 : réel
C : réel X2 : réel
HEURE
3
Rôle : affiche l’heure système
Module appelant
ALGORITHME Test
. Type
.
. Module appelé
Module A Module A
Début
.
.
Appel module A
.
.
Fin
Quand l’appel d’un module est rencontré, l’exécution du module appelant est suspendue,
jusqu’à ce que le module appelé soit totalement exécuté, puis l’exécution du module appelant
repart immédiatement après l’appel.
Avantages de la modularité :
1- on procède de façon naturelle à une conception à des algorithmes de manière
descendante, car la conception se fait par AFFINAGE PROGRESSIF.
2- L’étape de conception est simplifiée car les modules appelants et appelés sont
construits de manière séparée.
3- Pour utiliser un module, il faut seulement, savoir ce qu’il fait et non comment il est
construit.
4- Facilité de compréhension des solutions apportées.
5- Le concepteur gagne du temps dans la conception , car il peu construire une
bibliothèque des modules et il est possible de les cataloguer et de les utiliser à
n’importe quel algorithme.
il est donc recommandé d’avoir recours à la modularité systématiquement dans la
construction de nos solutions.
Interface FONCTION
(0, N) entrées
NOM DE LA FONCTION Type du résultat
(Objet élémentaire)
Rôle : ……………………..
4
Entête de la fonction FONCTION nom-de-la-fonction (liste des paramètres d’entrées) : type du
résultat
Déclaration
Début
Corps de la fonction
Nom-de-la-fonctionrésultat de la fonction
Fin
Le mode de passage :
Lorsqu’un paramètre est fourni au module et que l’on souhaite que le module nous restitue la
même valeur que le paramètre avait à l’entrée on effectuera un passage par valeur de ce
paramètre, vrais lorsqu’un paramètre d’entrée est modifié lors de l’exécution du module et
c’est ce contenue modifié que l’on souhaite, on effectuera un passage par variable (par
référence) dans ce cas le paramètre est précède du mot VAR.
Par défaut, c’est le passage par valeur qui est pris en compte il est recommandé de n’utiliser
que le passage par valeur pour les fonctions.
Fonction
Algorithme EXEMPLE
Variables x : entier
Début
Lire(x)
Ecrire (‘la factorielle de ‘,x,’est :’, FACTO(x))
FIN
3 3
x N : entier
FACTO
Entier
Fonction
M : entier
COMB Entier
P : entier
6
Analyse :
Utiliser la fonction
COMB=FACTO(N)/(FACTO(P)*FACTO(N-P))
FONCTION COMB (N, P : entier) : entier
Fonction FACTO
Début
FIN
Algorithme EXEMPLE
Variables x, y, z : entier
Début
Lire(x, y)
ZCOMB (x, y)
Ecrire (z)
FIN
Fonction
8 8
x M : entier 28 28
COMB Entier z
2 2
y P : entier
STRING 7
Liste des paramètres formels d’entrées :
( Identificateur :
Type de
)
résultat
va
rr
con
st
13 13
Et je lui interdis de modifier N dans le module.
Entrée N Sortie N
Programme test ;
Var x :integer ;
FUNCTION FACTO(N :integer) :longint ;
Var F,i :integer ;
Begin
F :=i ;
For i:=2 to N do F:=F*i;
FACTO:=F;
End;
Begin
Read(x);
Write(FACTO(x));
End.
8
Une fois que le module donne des resultats corrects.
2) cataloguer le module :
On ne laisse que les instructions constituant le module
ALT SAVE AS A : FACTO.FON
3- appel du module :
ouvrir fichier TEST.pas
effacer le module
inserrer la declaration {$i A :FACTO.FON}
programme test;
Var x :integer ;
{$i A :FACTO.FON}
Begin
Read(x);
Write(FACTO(x));
End.
Procédure
Rôle : ……………………..
Début
Corps de la
procédure
Fin
9
3-1-2- Appel d’une procédure
L’appel est lui-même une action primitive (instruction). Il est composé du nom de la
procédure suivi entre parenthèse de la liste des paramètres effectifs d’E/S séparés par des
virgules.
L’ordre, le nombre et le type des paramètres effectifs doivent être identiques à ceux des
paramètres formels correspondant.
PROCEDURE
A : entier
VAR X : Réel
R : réel
EXEMPLE
VAR Y : Booléen
C : caractère
Rôle : ……………………….
.
.
.
.
.
EXEMPLE(u,m,w,n,l)
.
.
.
Exemple: résolution d’une équation de second degré
PROCEDURE
A : réel
N : Entier
B : réel
EQU 2 X1 : réel
C : réel X2 : réel
10
Procedure equ2(a,b,c :reél ;var N :entier ;VAR X1 ,X2,X3:réel)
Variable delta:réel
Debut
DeltaSQR(b)-4*a*c
Si delta >0 alors
Dsi
X1(-b-sqrt(delta))/(2*a)
X2(-b+sqrt(delta)/(2*a)
N2
Fsi
Si non
Si delta =0 alors
Dsi non
X1-b/(2*a)
X2X1
N1
Fsi non
Si non N0
FIN
Algorithme appel
Variables u,v,w,m,n:réel
NB : entier
Procédure equ2
Debut
Lire(u,v,w)
Equ2(u,v,w,nb,m,n)
Cas NB parmi
0: ecrire(‘pas de racine’)
1: ecrire(‘une racine double X1=X2=’,m)
2: eccrire (‘2 racines X1=’,m,’et X2=’,n)
FIN.
Corps de la procédure ;
11
PROCEDURE equ2(a,b,c :real ;var N :integer ;VAR X1 ,X2,X3:real);
.
.
.
END;
Entête
Cette partie ne contient qu'une ligne commençant par le mot réservé Unit suivi du nom
de l'unité qui sera aussi le nom du fichier TPU produit.
Par exemple : Unit Outils;
Interface
Cette partie commence par le mot réservé INTERFACE.
Elle contient une série de déclarations d'objets qui seront accessibles aux
programmes utilisant l'unité.
On retrouvera :
• Uses suivi des noms d'unités utilisées
• Const suivi des définitions de constantes
12
• Type suivi des définitions de types de données
• Var suivi des variables déclarées
• les déclarations des procédures et des fonctions partagées, seuls les entêtes
apparaissent ici.
Implémentation
Cette partie commence par le mot réservé IMPLEMENTATION.
Elle peut contenir de nouvelles déclarations d'unités, de constantes, de types ou
de variables, suivis de procédures et fonctions définies entièrement.
Tout ce qui n'a pas été déclaré dans la partie Interface sera invisible pour un
programme utilisant l'unité.
Initialisation de l'unité
C'est la dernière partie de l'unité. Elle commence par un BEGIN et se termine
par un END suivi du point final. Cette partie sera exécutée avant le début du
programme utilisant l'unité.
Exemple :
Unit Tangt;
Var a : Real;
Function Tangente (a : Real) : Real;
IMPLEMENTATION
Function Tangente (a : Real) : Real;
Begin
Tangente := Sin(a) / Cos(a) ;
End;
BEGIN
END.
Et le programme TAN.PAS :
Program Tan;
Uses Tang ;
Var x : Real ;
BEGIN
Write('Entrez un angle en radians : ') ;
ReadLn(x) ;
WriteLn('Voici sa tangente : ',Tangente(2)) ;
END.
13
Module appelant
Module 1
Module 3
Variables V, W, X, Z: reel
les objets locaux sont définis dans le module ou ils ont été déclares, et ne peuvent être
manipulés que dans ce module.
Ils sont locaux à ce module, et ne sont pas utilisables en dehors.
les objets globaux sont définis dans un module appelant ils peuvent être manipulés
dans tous les modules appelés par ce module.
L’ensemble des objets ou l’objet est accessible s’appelle la portée.
Portée
Objets
Module 1 Module 2 Module 3 Module appelant
X *
A * * * *
B * * * *
X * *
REP * *
C *
V *
W *
X *
Z *
Les objets globaux nous permettent parfois de gagner du temps et d’éviter des erreurs, il est
donc utile de les utiliser.
14
Si non ne modifier que les objets locaux. (Ce qui veut dire ne pas mettre l’objet G. à gauche
du symbole .)
Exemple :
Algorithme EFFBORD
Variables A, B, E: entier
Fonction test (c : entier) : entier
Debut
AB*A
BA-C
TestA+B
Fin
debut
A1
B5
E1
Ecrire(test(E))
Ecrire(test(E))
Ecrire(test(E))
fin
Déroulement :
15