cours1 min de lecture

Paradigmes de programmation

Distinguer impératif, fonctionnel et objet — un même problème (la somme d'une liste) résolu dans les trois styles.
programme

Introduction

Un paradigme de programmation est une manière de concevoir un programme. Ce n'est pas un langage : un même langage (comme Python) permet d'écrire en plusieurs paradigmes — souvent dans le même fichier. C'est l'objet de l'item .

Trois paradigmes structurent l'enseignement de la Terminale : impératif, fonctionnel et orienté objet. Connaître les trois ne vous transformera pas en philosophe du code — mais cela vous donnera, devant un problème, plusieurs angles d'attaque, et la capacité de lire des bases de code écrites par d'autres dans leur style natif.

Une analogie culinaire éclaire la distinction. L'impératif ressemble à une recette de cuisine : « prendre une casserole, verser l'eau, allumer le feu, attendre, ajouter le sel… » — une suite d'instructions sur un état qui évolue. Le fonctionnel ressemble à la description du plat fini : « un risotto = un riz arrondi, lié au bouillon, parfumé au safran » — une composition, pas une marche à suivre. L'objet ressemble à un cuisinier qui dispose de méthodes (saler, goûter, flamber) et qui maintient en mémoire l'état de sa préparation.

Trois paradigmes en une phrase

ParadigmeIdée centraleÉlément de base
ImpératifDécrire une suite d'instructions qui modifient un état.Variable, affectation, boucle.
FonctionnelComposer des fonctions pures qui transforment des données.Fonction, application, composition.
Orienté objetModéliser des objets qui portent état et comportement.Classe, instance, méthode.
Aucun paradigme n'est universellement supérieur. Chacun éclaire mieux certains problèmes : le fonctionnel brille sur les transformations de données, l' impératif sur les boucles sur structures mutables, l'objet sur la modélisation de systèmes avec état persistant.

Le même problème, trois fois — la somme d'une liste

Prenons une tâche élémentaire : calculer la somme d'une liste d'entiers.

Style impératif

On parcourt la liste, on accumule dans une variable.

def somme_imperative(liste):
    """Somme par accumulation dans une variable mutable."""
    total = 0                      # état initial
    for x in liste:                # boucle
        total = total + x          # mise à jour de l'état
    return total

print(somme_imperative([1, 2, 3, 4]))   # 10

Clés : variable total qui mute, boucle for explicite, séquence d'instructions qui décrivent comment calculer.

Style fonctionnel

On exprime la somme comme l'application d'une opération de réduction sur la liste.

from functools import reduce
from operator import add

def somme_fonctionnelle(liste):
    """Somme par réduction — pas de variable mutable."""
    return reduce(add, liste, 0)

print(somme_fonctionnelle([1, 2, 3, 4]))   # 10

# Variante encore plus directe :
print(sum([1, 2, 3, 4]))                   # 10 — sum est une fonction native

Clés : aucune affectation, aucune boucle visible, on décrit le résultat comme la réduction de la liste par l'addition à partir de 0. La fonction est pure : pas d'effet de bord, le même argument donne toujours le même résultat.

Trois primitives fonctionnelles à retenir :
  • map(f, l) : applique f à chaque élément.
  • filter(p, l) : garde les éléments qui vérifient le prédicat p.
  • reduce(op, l, init) : combine tous les éléments par op.

Style orienté objet

On modélise un objet somme qui porte un état (le total courant) et expose des méthodes pour le faire évoluer.

class Somme:
    """Objet qui accumule une somme par ajouts successifs."""

    def __init__(self):
        self._total = 0

    def ajouter(self, x):
        self._total += x

    def valeur(self):
        return self._total


s = Somme()
for x in [1, 2, 3, 4]:
    s.ajouter(x)
print(s.valeur())              # 10

Clés : la classe Somme encapsule l'état (self._total) et expose un contrat (ajouter, valeur). L'utilisateur ne manipule plus une variable locale, mais un objet qu'on instancie et avec lequel on dialogue.

Quel paradigme n'utilise pas de variable mutable ?

Comment choisir ?

Type de problèmeParadigme privilégié
Pipeline de transformation de données (CSV, JSON…).Fonctionnel (map/filter/reduce).
Algorithme sur un tableau, simulation pas à pas.Impératif.
Modélisation d'un domaine métier (jeu, banque, plateforme).Orienté objet.
Interface graphique, machine à état.Objet, souvent.
En pratique, on mixe : un programme Python typique utilise des classes (objet) qui contiennent des boucles (impératif) et appellent map/filter (fonctionnel). Le pragmatisme prime sur la pureté.

Une fonction pure est une fonction qui…

Pour aller plus loin

D'autres paradigmes existent : logique (Prolog), concurrent (acteurs, Erlang), réactif (flux d'événements). Le programme officiel limite l'étude aux trois principaux. Mais retenez l'idée : un langage n'est qu'un véhicule ; le style que vous y adoptez dépend du paradigme — et de votre maturité de concepteur.