Aller au contenu

Numérique et sciences informatiques (spécialité) · TerminaleBac

Paradigmes de programmation : cours de Terminale NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Un paradigme est une manière d'aborder la programmation et d'imaginer la solution d'un problème ; il façonne la vue qu'on a de l'exécution du programme.
  • Impératif : une suite d'instructions qui modifient l'état (les variables). Procédural et structuré en sont des dérivés.
  • Fonctionnel : le programme est une suite d'évaluations de fonctions sans état ; on évite les effets de bord.
  • Objet : le programme est une collection d'objets en interaction (attributs + méthodes). Logique : faits, règles, requêtes. Concurrent : plusieurs tâches en même temps.
  • Un langage comme Python accepte plusieurs paradigmes : le paradigme est une manière de penser le code, pas une propriété exclusive du langage.

Pourquoi parler de paradigmes ?

Tu sais déjà écrire des programmes en Python : des boucles, des fonctions, des classes, de la récursivité. Pourtant, deux programmes qui résolvent le même problème peuvent avoir un aspect très différent, parce que leurs auteurs n'ont pas raisonné de la même façon. Ce cours donne un nom et une structure à ces façons de raisonner : les paradigmes de programmation.

Cette notion arrive après la récursivité et la modularité, que tu as déjà rencontrées, et elle prépare la mise au point des programmes : pour corriger un programme, il faut d'abord comprendre comment il est pensé. Au bac, des exercices portent sur la programmation Python, la programmation orientée objet et les structures de données 2 : savoir nommer le style d'un code t'aide à lire un énoncé plus vite.

Un paradigme n'est donc pas un langage, ni une technique isolée. C'est un point de vue. Il détermine la vue que le développeur a de l'exécution de son programme 3. Selon le point de vue, un même programme est une recette qu'on suit pas à pas, un réseau d'objets qui se parlent, ou un assemblage de fonctions.

Les grandes familles de paradigmesCarte mentale centrée sur les paradigmes de programmation, avec cinq branches : impératif, fonctionnel, objet, logique et concurrent.InstructionsVariablesProcéduralImpératifFonctionsSans étatRécursivitéFonctionnelClassesAttributsMéthodesObjetFaitsRèglesRequêtesLogiqueThreadsTâches parallèlesConcurrentParadigmes

Paradigmes

  • Impératif
    • Instructions
    • Variables
    • Procédural
  • Fonctionnel
    • Fonctions
    • Sans état
    • Récursivité
  • Objet
    • Classes
    • Attributs
    • Méthodes
  • Logique
    • Faits
    • Règles
    • Requêtes
  • Concurrent
    • Threads
    • Tâches parallèles
Les grandes familles de paradigmes · Chaque paradigme est une façon de penser le même programme.

Le paradigme impératif : donner des ordres

Le paradigme impératif est le paradigme originel et le plus courant 3. Tu l'as pratiqué dès tes premiers programmes : le programme est une suite d'instructions exécutées dans l'ordre, qui modifient l'état de la machine, c'est-à-dire le contenu des variables. Quand on cherche des langages qui l'implémentent, on peut citer le C, le Pascal, le Fortran ou encore le Cobol 4.

Des dérivés du paradigme impératif sont à connaître :

  • la programmation structurée, qui cherche à organiser les programmes impératifs pour en faire disparaître les instructions goto 3. Tes boucles for, while et tes if sont des structures de contrôle de ce style ;
  • la programmation procédurale, qui isole des morceaux de programme dans des procédures ou fonctions, paramétrables et utilisables de façon répétée 4. Selon le paradigme, ces morceaux s'appellent procédures, fonctions ou méthodes 4.

Le paradigme fonctionnel : composer des fonctions

En programmation fonctionnelle, un programme est vu comme une suite d'évaluations de fonctions sans états 3. On ne cherche pas à modifier des variables : on calcule une valeur à partir d'autres valeurs, comme en mathématiques. Haskell est un exemple de langage conçu pour supporter ce paradigme 3.

Le lien avec ton cours est direct : pour prouver qu'une fonction récursive sans effet de bord est correcte, il suffit de raisonner sur ses arguments et sa valeur de retour. Avec des effets de bord, il faut aussi suivre l'état de tout ce qu'elle peut modifier.

Le paradigme orienté objet : des objets qui collaborent

En programmation orientée objet (POO), les développeurs considèrent le programme comme une collection d'objets en interaction 3. Smalltalk et Java sont des exemples de langages conçus pour supporter ce paradigme 3 ; on cite aussi C++, Simula et Swift 4. Au bac, la programmation orientée objet en Python est une compétence régulièrement évaluée 2.

Dans ce style, on commence par se demander : quels sont les « êtres » du problème, que savent-ils et que peuvent-ils faire ? Les données (les attributs) et les opérations qui les concernent (les méthodes) sont regroupées dans une classe. Une méthode est l'un des noms que prennent les morceaux réutilisables de programme selon le paradigme 4.

Les paradigmes logique et concurrent

D'autres paradigmes élargissent ta vision de la programmation. Ce ne sont pas ceux que tu pratiques le plus en NSI, mais ils montrent qu'un programme n'est pas toujours une liste d'ordres.

Ces notions se sont surtout répandues quand les ordinateurs ont reçu plusieurs processeurs capables de mener des tâches en parallèle 4. C++ et Java permettent de créer et manipuler des threads, et des langages comme Go ont été conçus entièrement pour la gestion de la concurrence 4. On parle aussi de programmation orientée processus, où les applications sont des ensembles de processus agissant sur des structures de données partagées 3.

Tu retrouves ce thème dans les sujets du bac : un exercice recensé réunit la programmation orientée objet, une structure de données (la file), l'ordonnancement des processus et l'interblocage 2. La concurrence pose en effet des questions nouvelles : que se passe-t-il quand deux tâches veulent la même ressource ?

Un langage, plusieurs paradigmes

Chaque langage de programmation reflète un ou plusieurs paradigmes, avec un ensemble de notions qui servent à exprimer une solution 4. Une fois la solution imaginée selon un paradigme, un langage qui le suit permet de l'exprimer 4.

La relation entre paradigmes et langages peut donc être complexe. Prenons C++ : il offre des éléments de programmation procédurale, orientée objet et générique, mais rien n'oblige à tous les employer. On peut y écrire un programme entièrement procédural, ou entièrement orienté objet 3. Ce sont les concepteurs et les développeurs qui choisissent la façon de construire le programme 3.

Paradigmes, idée centrale et langages cités
ParadigmeIdée centraleExemples de langages
ImpératifSuite d'instructions qui modifient l'étatC, Pascal, Fortran, Cobol
FonctionnelÉvaluations de fonctions sans étatsHaskell
Orienté objetObjets en interactionSmalltalk, Java, Simula, Swift
LogiqueRecherches dans un ensemble de faits par déductionLangages à règles et requêtes
ConcurrentPlusieurs tâches en même tempsC++, Java, Go
Multi-paradigmesPlusieurs approches possiblesPython, C++, OCaml, Scala
Paradigmes, idée centrale et langages cités · D'après les exemples de langages donnés dans les sources du cours.

Comparer et reconnaître les paradigmes

Au bac comme dans la vie courante, tu dois pouvoir regarder un morceau de code et dire dans quel style il est écrit. Voici une grille de lecture.

Paradigmes et programmation au bac

À l'épreuve écrite de NSI, le candidat traite plusieurs exercices indépendants, sans calculatrice ; les programmes s'écrivent en Python et les requêtes de base de données en SQL 2. Une épreuve pratique d'une heure sur machine s'y ajoute 2. Les paradigmes n'apparaissent pas toujours sous leur nom, mais tu les mobilises à chaque question de programmation.

Exercices corrigés

Exercice 1 Même calcul, deux styles

★☆☆Environ 10 min

On veut calculer la somme des carrés des entiers de 1 à 5.

  1. Écris une fonction impérative somme_carres_imp(n) qui utilise une boucle for et une variable total.
  2. Écris une fonction récursive sans variable modifiée somme_carres_rec(n).
  3. Donne la valeur renvoyée pour n = 5.
Indice 1

Pour la version récursive, la somme des carrés de 1 à n vaut n au carré plus la somme des carrés de 1 à n-1.

Indice 2

Le cas de base est n = 0, avec la valeur 0.

Voir la correction pas à pas
  1. Version impérative : on initialise total = 0, on parcourt for k in range(1, n + 1) et on fait total = total + k * k, puis return total.

  2. Version récursive : si n == 0, on renvoie 0 ; sinon on renvoie n * n + somme_carres_rec(n - 1).

  3. Calcul pour n = 5 : 1 + 4 + 9 + 16 + 25 = 55.

  4. Les deux versions donnent 55, mais seule la première modifie une variable au fil de l'exécution.

Le résultat est 55. La version impérative repose sur l'évolution de total ; la version fonctionnelle définit le résultat par réduction du problème, sans état modifié.

Exercice 2 Un compte en objet

★★☆Environ 15 min

On reprend la classe Compte du cours. On exécute :

c = Compte("Inès", 200)
c.deposer(80)
c.retirer(50)
c.deposer(20)
  1. Quel est l'attribut modifié par les appels de méthodes ?
  2. Quelle est la valeur de c.solde à la fin ?
  3. Peut-on dire que deposer est une fonction sans effet de bord ? Justifie.
Indice 1

Suis la valeur de solde après chaque appel.

Indice 2

Demande-toi si deposer renvoie quelque chose, ou si elle change l'objet.

Voir la correction pas à pas
  1. L'attribut modifié est solde : chaque méthode agit sur self.solde.

  2. Après la création, le solde vaut 200.

  3. Après deposer(80) il vaut 280 ; après retirer(50) (50 est inférieur ou égal à 280) il vaut 230 ; après deposer(20) il vaut 250.

  4. La méthode deposer ne renvoie rien : son rôle est de modifier l'objet. Elle a donc un effet de bord, et c'est normal en programmation objet, où l'état appartient à l'objet.

Le solde final est 250. En POO, les méthodes modifient l'état de l'objet : ce n'est pas du style fonctionnel pur, mais cela reste maîtrisé puisque seul l'objet touche à ses données.

Exercice 3 Réécrire sans effet de bord

★★★Environ 15 min

Voici une fonction :

def double(liste):
    for i in range(len(liste)):
        liste[i] = 2 * liste[i]
  1. On exécute L = [1, 2, 3] puis double(L). Que vaut L ensuite ?
  2. Explique pourquoi cette fonction a un effet de bord.
  3. Écris une version double_pure(liste) sans effet de bord, qui laisse liste intacte.
  4. Dans quel paradigme se range chacune des deux versions ?
Indice 1

La fonction n'a pas de return : où le résultat est-il donc stocké ?

Indice 2

Construis une nouvelle liste plutôt que de modifier celle reçue.

Voir la correction pas à pas
  1. Après l'appel, L vaut [2, 4, 6] : la liste d'origine a été modifiée en place.

  2. Il y a effet de bord car la fonction change un objet qui existe hors d'elle (la liste reçue en argument) au lieu de renvoyer une valeur.

  3. Version sans effet de bord : def double_pure(liste): return [2 * x for x in liste]. Elle crée une nouvelle liste ; l'originale reste [1, 2, 3].

  4. double relève du style impératif (modification d'un état) ; double_pure suit l'esprit fonctionnel (résultat dépendant uniquement de l'argument, sans modification).

Quand une fonction modifie son argument, elle a un effet de bord. La version qui renvoie une nouvelle liste est plus facile à raisonner, ce qui rejoint l'intérêt du style fonctionnel pour vérifier un programme.

Quiz

8 questions · correction immédiate · ton score reste sur ton appareil.

  1. Que désigne un paradigme de programmation ?

  2. Dans quel paradigme le programme est-il vu comme une collection d'objets en interaction ?

  3. Quelle technique la programmation fonctionnelle pure interdit-elle ?

  4. Python supporte plusieurs paradigmes de programmation.

  5. Quelle instruction la programmation structurée cherche-t-elle à supprimer des programmes impératifs ?

  6. Quelles affirmations sur le paradigme concurrent sont correctes ? (plusieurs réponses)

    Plusieurs réponses possibles.

  7. On considère :

    def f(liste):
        if liste == []:
            return 0
        return liste[0] ** 2 + f(liste[1:])
    

    Quelle valeur renvoie f([1, 2, 3]) ?

  8. Une fonction reçoit une liste en argument, la modifie en place avec append, et ne renvoie rien. Que peut-on dire ?

Les questions qu'on se pose

Faut-il choisir un seul paradigme pour un programme ?

Non. La plupart des langages contemporains permettent d'adopter plusieurs paradigmes à condition qu'ils soient compatibles 4. Dans un même programme Python, tu peux avoir des classes (objet), des méthodes qui modifient des attributs (impératif) et des fonctions récursives sans effet de bord (fonctionnel). L'important est que le style soit cohérent dans chaque partie du code.

À quoi sert de connaître les paradigmes si je programme déjà en Python ?

À mieux choisir comment écrire une solution et à mieux lire le code des autres. Un paradigme détermine la vue qu'on a de l'exécution du programme 3 : savoir en changer te donne plusieurs façons d'attaquer un problème. C'est aussi utile pour répondre à une question d'examen qui demande de justifier un choix de conception.

Comment savoir si un code est fonctionnel ou impératif ?

Regarde si des variables sont modifiées au fil de l'exécution. Si oui (compteur dans une boucle, liste modifiée en place), le style est impératif. Si le résultat est obtenu en composant des appels de fonctions qui ne modifient rien, souvent par récursivité, le style est fonctionnel. Un indice fiable : la présence ou non d'effets de bord, que la programmation fonctionnelle pure interdit 3.

La programmation orientée objet est-elle au programme du bac NSI ?

Oui : des sujets recensés comportent des exercices sur la programmation orientée objet en Python, associée à l'algorithmique ou aux structures de données 2. Prépare-toi à lire une classe, à compléter une méthode et à comprendre comment l'état d'un objet évolue (voir l'exercice sur le compte).

Les paradigmes logique et concurrent sont-ils à connaître en détail ?

Dans ce cours, retiens leur idée de base : le paradigme logique répond à une question par des recherches dans un ensemble de faits, avec des règles de déduction 4, et le paradigme concurrent permet d'exécuter plusieurs tâches en même temps 4. Il s'agit surtout de reconnaître ces paradigmes et de les distinguer de l'impératif, de l'objet et du fonctionnel que tu pratiques en Python.

Sources

Programme visé : Programmes et ressources - Numérique et Sciences Informatiques (voie générale) · Ministère de l'Éducation nationale / Éduscol

  1. Programmes et ressources - Numérique et Sciences Informatiques (voie générale), Ministère de l'Éducation nationale / Éduscol. Consulté le 7 novembre 2026.
  2. Spécialité NSI - Numérique et Sciences Informatiques, Éduscol STI. Consulté le 7 novembre 2026.
  3. Paradigme (programmation), Wikipédia. Consulté le 7 novembre 2026.
  4. Langage de programmation, Wikipédia. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page