La plupart des langages de programmation nous permettent de subdiviser nos programmes en sous-programmes, fonctions ou procédures plus simples et plus compacts. A l'aide de ces structures nous pouvons modulariser nos programmes pour obtenir des solutions plus élégantes et plus efficientes.
Modules
Dans ce contexte, un module désigne une entité de données et d'instructions qui fournissent une solution à une (petite) partie bien définie d'un problème plus complexe. Un module peut faire appel à d'autres modules, leur transmettre des données et recevoir des données en retour. L'ensemble des modules ainsi reliés doit alors être capable de résoudre le problème global.
Dans ce manuel, les modules (en C: les fonctions) sont mis en évidence par une bordure dans la marge gauche.
Avantages
Voici quelques avantages d'un programme modulaire:
* Meilleure lisibilité
* Diminution du risque d'erreurs
* Possibilité de tests sélectifs
* Dissimulation des méthodes
Lors de l'utilisation
d'un module il faut seulement connaître son effet, sans devoir s'occuper
des détails de sa réalisation.
* Réutilisation de modules déjà
existants
Il est facile d'utiliser des modules qu'on a écrits
soi-même ou qui ont été développés par
d'autres personnes.
* Simplicité de l'entretien
Un module peut être
changé ou remplacé sans devoir toucher aux autres modules du
programme.
* Favorisation du travail en équipe
Un programme peut
être développé en équipe par
délégation de la programmation des modules à
différentes personnes ou groupes de personnes. Une fois
développés, les modules peuvent constituer une base de travail
commune.
* Hiérarchisation des modules
Un programme peut d'abord
être résolu globalement au niveau du module principal. Les
détails peuvent être reportés à des modules
sous-ordonnés qui peuvent eux aussi être subdivisés en
sous-modules et ainsi de suite. De cette façon, nous obtenons une
hiérarchie de modules.
Les modules peuvent être
développés en passant du haut vers le bas dans la
hiérarchie ('top-down-development' - méthode du raffinement
progressif) ou bien en passant du bas vers le haut
('bottom-up-development').
En principe, la méthode du raffinement progressif est à préférer, mais en pratique, on aboutit souvent à une méthode hybride, qui construit un programme en considérant aussi bien le problème posé que les possibilités de l'ordinateur ciblé ('méthode du jo-jo').