Skip to content

Paradigme ? What is it ? Partie 2 – Procédural – Modulaire

Derrière ce nom fort sympathique se cache simplement la notion de fonction, de procédure, de routine comme disent les vieux de la vieille. Cela va nous permettre de faire une croix sur le goto et d’éviter de faire de la programmation trop spaghetti comme on dit dans le jargon, mais surtout de créer des blocs de code réutilisables.

Il est bon de savoir que le paradigme procédural est un sous ensemble du paradigme impératif et fait partie intégrante de la programmation structurée. Mince ça fait mal ça…

2.1 Quelques définitions

Nous allons décrire quelques définition pour mieux comprendre de bout en bout le paradigme procédural et comment il s’intègre en Javascript par apport à C ou C++. Même si vous l’utilisez tous les jours, il est bon de faire un petit rappel pour remettre les idées en place.

2.1.1 Programmation structurée

Le but de la programmation structurée est d’améliorer la lisibilité, la qualité et le contrôle d’un code source. Au sein de la programmation structuré on retrouve les structures de contrôles classiques comme le for, le if, le while, etc. Si ces notions vous paraissent familières, elle n’est pas forcément présente dans tout les langages de programmation. La programmation structurée est aussi une méthodologie visant à la transmission de meilleures pratiques de développement. Ces méthodes vont de la décomposition des tâches à accomplir en petit blocs éventuellement réutilisables mais surtout facilement compréhensible. Prévenir les effets de bords en évitant l’utilisation de variables globales, limiter la taille d’une routine ou d’un module…

2.1.2 Routine

Une routine est une encapsulation de code source (un bloc de code), avec éventuellement un certain nombre de paramètres en entré, chargé d’effectuer une action particulière grâce à l’exécution d’une séquence d’instructions. Une routine suit donc le paradigme impératif. Elle peut ainsi être utilisée plusieurs fois au sein d’un programme d’un autre programme ou même parfois être utilisée au sein d’une autre routine. Pour faire simple, une routine est ce qu’on appelle un sous programme. Les routines se décomposent en deux sous ensembles, les procédures et les fonctions.

2.1.3 Procédure

Une procédure est une forme de routine qui ne retourne pas de valeur. Elle sert donc à exécuter une ou plusieurs tâches. Sous la forme de programmation orientée objet on appelle la procédure, une méthode.

En JavaScript la procédure, comme la fonction, se détermine à partir du mot-clé function. Il s’agit donc simplement d’une fonction qui ne retourne rien.

En C et C++ la procédure est aussi une fonction qui ne retourne rien, plus précisément void :

2.1.3 Fonction

Une fonction est une forme de routine qui retourne une valeur. Elle sert donc généralement à calculer une valeur dépendante aux paramètres d’entré (généralement). Elle peut tout comme une procédure exécuter une ou plusieurs tâches, en déduire des valeurs, ou tout simplement en déduire si la tâche à réussi ou non.

En javascript la définition reste la même que pour une procédure, par contre on retrouve le mot-clé return dans le corps de la fonction.

En C et C++ la signature diffère de celle de la procédure car le type de retour doit être renseigné :

2.2 Récursivité

Une routine en son sein, peut s’appeler elle-même, dans ce cas on parle de récursivité. La récursivité a la propriété intéressante de pouvoir à la fois décrire un traitement itératif en quelques lignes seulement mais surtout de permettre des parcours de graphes.

2.2.1 Parcours itératif par récursivité

Par exemple on peut trouver facilement par récursivité la factorielle d’un nombre. Cette approche récursive, peut être traité par une simple boucle, c’est pour cette raison qu’on appelle cela un parcours itératif par récursivité.

On retrouve le même résultat itérativement :

2.2.2 Parcours de graphe

La récursion trouve vraiment sa place dans le parcours de graphes, qui est plus facile à implémenter que la manière itérative avec une pile (avis personnel).

Au sein du paradigme procédural rien n’empêche l’introduction d’effet de bord par l’utilisation de variable extérieures à la procédure (variable globales par exemple). On essaye cependant de limiter les effets de bord au sein du module ou sont implémentés les procédures pour éviter des effets indésirable lors de l’utilisation de ces modules dans un autre projet.

Le procédural étends la notion de portée des variables. La portée (scope), pour faire simple, c’est le contexte ou une variable est accessible. Par exemple, selon le design du langage, une variable déclarée dans une procédure peut-être accessible ou non en dehors de cette procédure.

Exemple Python:

On remarque que la variable a est accessible dans my_function car la sortie affiche 10. Cependant elle est inaccessible en dehors, on obtient une magnifique erreur.

3. Le paradigme modulaire

Premier pas vers la programmation orientée objet, la programmation modulaire permet de regrouper un ensemble de routines au sein d’un bloc – le module – qui aura pour but de traiter une fonctionnalité précise. Le paradigme modulaire s’inscrit dans la programmation structurée car il permet de découper le code source d’un programme à un niveau supérieur et permet la ré-utilisabilité de ce code par d’autres applications.

Ce découpage permet aussi un travail en équipe plus aisé, chacun peut travailler sur son module. De plus, les modules peuvent être vus comme des boites noires à qui on fourni une entrée pour obtenir une sortie sans forcément connaitre comment le résultat est calculé.

Le paradigme modulaire est un premier pas vers le paradigme objet (programmation orientée objet dit aussi POO) ou les modules sont généralement remplacé par des classes. Il fait aussi apparaitre la notion de visibilité qui permet de déterminer si une procédure est accessible à l’extérieur du module (publique) ou uniquement à l’intérieur (privée). Le principe de portée des variables est aussi étendu au module.

Bien que ce paradigme soit accessible dans de nombreux langages non objets, on retrouve celui-ci dans la POO. Dans ce cas un module est généralement implémenté grâce à la création de classes statiques. Bien sûr en POO ce paradigme est poussé encore plus loin que le simple fait de regrouper un ensemble de fonctionnalités sous un même module.

Ainsi la manière la plus simple d’implémenter un module C / C++, sera de créer un fichier .c et un fichier .h contenant un ensemble de routines et de variables publiquement accessibles. Ce « module » sera ainsi accessible par le biais de son inclusion.

Avec JavaScript la constitution d’un module peut se faire par l’encapsulation du code source au sein d’une fonction immédiate (une fonction déclarée et directement appelée). Cette encapsulation permet de séparer les fonctions publiques de celles privées et compacte le tout dans un module utilisable [2].

Exemple de module en JavaScript :

Ceci est bien sûr à prendre à titre d’exemple, car la définition de module peut-être implémenté sous d’autres formes en Javascript.

Pour conclure, on peut voir le paradigme modulaire comme un sur-ensemble de la programmation procédurale faisant partie de la programmation structurée.

No comments yet.

Laisser un commentaire

Comments (0)