Les Paradigmes de Programmation
Un paradigme de programmation est une approche théorique, une "philosophie" qui guide la manière de structurer un algorithme et de traiter les données. En Terminale NSI, nous étudions comment un même problème peut être résolu selon des angles différents : l'exécution d'ordres (impératif), l'évaluation mathématique (fonctionnel) ou la manipulation d'entités (objet).
1. Le Paradigme Impératif
Le paradigme impératif est le plus proche du fonctionnement physique des ordinateurs (architecture de Von Neumann). Le programme est une suite d'instructions qui modifient l'état de la mémoire.
L'état est l'ensemble des valeurs des variables à un instant donné. On parle de mutation lorsque l'on utilise l'affectation (=) pour changer la valeur d'une variable existante.
Exemple : Somme et Puissance (Style Impératif)
def somme_imperative(n):
total = 0 # Initialisation de l'état
for i in range(1, n + 1):
total = total + i # Mutation de la variable
return total
def puissance_imperative(x, n):
r = 1
for i in range(n):
r = r * x # Mutation de la variable
return r
2. Le Paradigme Fonctionnel
Inspiré des mathématiques, ce paradigme traite le programme comme une succession d'évaluations de fonctions. On cherche à supprimer les variables globales et les changements d'état intempestifs.
En programmation fonctionnelle pure, les données sont immuables : on ne modifie jamais une liste ou une variable, on en crée une nouvelle version transformée.
Exemple : Somme et Puissance (Récursivité)
def somme_fonctionnelle(n):
if n == 0:
return 0
return n + somme_fonctionnelle(n - 1)
def puissance_fonctionnelle(x, n):
if n == 0:
return 1
return x * puissance_fonctionnelle(x, n - 1)
3. Focus : Les Effets de Bord
C'est un point central du programme NSI. La distinction entre un code "propre" et un code "imprévisible" repose souvent sur la gestion des effets secondaires.
Une fonction possède un effet de bord si elle modifie l'environnement extérieur à sa propre portée. Cela inclut :
- La modification d'une variable globale.
- La modification d'un objet (liste, dictionnaire) passé en argument.
- Une action d'affichage (
print()) ou d'écriture disque.
Une fonction sans effet de bord est appelée fonction pure. Elle est prévisible : pour une même entrée, elle donnera toujours la même sortie (transparence référentielle).
Exemple de différence en Python :
# AVEC effet de bord (Impératif)
L = [1, 2, 3]
def ajoute_impure(val):
L.append(val) # On modifie la liste L externe
# SANS effet de bord (Fonctionnel)
def ajoute_pure(liste, val):
return liste + [val] # On renvoie une NOUVELLE liste
4. La Programmation Orientée Objet (POO)
Ce paradigme regroupe les données et les traitements dans des entités nommées Objets, issus de modèles appelés Classes.
- Encapsulation : On protège les données internes.
- Héritage : On crée des classes à partir de classes existantes.
- Polymorphisme : Une même méthode s'adapte à l'objet qui l'appelle.
Exemple : Somme et Puissance (Style Objet)
class Calculateur:
def __init__(self, n):
self.n = n
def somme(self):
return sum(range(self.n + 1))
class Nombre:
def __init__(self, x):
self.valeur = x
def puissance(self, n):
return self.valeur ** n
5. Le Paradigme Déclaratif
Contrairement aux styles précédents qui décrivent comment résoudre le problème, le style déclaratif décrit quel résultat est attendu.
SELECT nom FROM table WHERE age > 18;. On ne programme pas la boucle de recherche, on définit les critères du résultat.6. Synthèse Comparative
| Critère | Impératif | Fonctionnel | Objet |
|---|---|---|---|
| Philosophie | Séquence d'ordres | Évaluation de fonctions | Interaction d'objets |
| Données | Mutables (changeantes) | Immuables (fixes) | Encapsulées |
| Somme |
|
|
|
| Puissance |
|
|
|

