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.
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
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
goto3. Tes bouclesfor,whileet tesifsont 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.
| Paradigme | Idée centrale | Exemples de langages |
|---|---|---|
| Impératif | Suite d'instructions qui modifient l'état | C, Pascal, Fortran, Cobol |
| Fonctionnel | Évaluations de fonctions sans états | Haskell |
| Orienté objet | Objets en interaction | Smalltalk, Java, Simula, Swift |
| Logique | Recherches dans un ensemble de faits par déduction | Langages à règles et requêtes |
| Concurrent | Plusieurs tâches en même temps | C++, Java, Go |
| Multi-paradigmes | Plusieurs approches possibles | Python, C++, OCaml, Scala |
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
On veut calculer la somme des carrés des entiers de 1 à 5.
- Écris une fonction impérative
somme_carres_imp(n)qui utilise une boucleforet une variabletotal. - Écris une fonction récursive sans variable modifiée
somme_carres_rec(n). - 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
Version impérative : on initialise
total = 0, on parcourtfor k in range(1, n + 1)et on faittotal = total + k * k, puisreturn total.Version récursive : si
n == 0, on renvoie 0 ; sinon on renvoien * n + somme_carres_rec(n - 1).Calcul pour n = 5 : 1 + 4 + 9 + 16 + 25 = 55.
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
On reprend la classe Compte du cours. On exécute :
c = Compte("Inès", 200)
c.deposer(80)
c.retirer(50)
c.deposer(20)
- Quel est l'attribut modifié par les appels de méthodes ?
- Quelle est la valeur de
c.soldeà la fin ? - Peut-on dire que
deposerest 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
L'attribut modifié est
solde: chaque méthode agit surself.solde.Après la création, le solde vaut 200.
Après
deposer(80)il vaut 280 ; aprèsretirer(50)(50 est inférieur ou égal à 280) il vaut 230 ; aprèsdeposer(20)il vaut 250.La méthode
deposerne 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
Voici une fonction :
def double(liste):
for i in range(len(liste)):
liste[i] = 2 * liste[i]
- On exécute
L = [1, 2, 3]puisdouble(L). Que vautLensuite ? - Explique pourquoi cette fonction a un effet de bord.
- Écris une version
double_pure(liste)sans effet de bord, qui laisselisteintacte. - 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
Après l'appel,
Lvaut[2, 4, 6]: la liste d'origine a été modifiée en place.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.
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].doublerelève du style impératif (modification d'un état) ;double_puresuit 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.
-
Un paradigme est une manière d'aborder la programmation et de formuler les solutions 3. Ce n'est pas un langage (un langage peut en supporter plusieurs), ni une méthode d'organisation d'équipe : on confond parfois paradigme et méthodologie de travail, alors qu'un paradigme concerne la conception de la solution dans le code.
-
La programmation fonctionnelle pure interdit les effets de bord 3. La récursivité est au contraire l'outil naturel de ce style : la croire interdite est l'erreur la plus fréquente.
-
Python fait partie des langages qui supportent des paradigmes multiples 3. Dire qu'il est « uniquement orienté objet » ou « uniquement impératif » est faux : tout dépend de la façon dont on écrit le code.
-
La programmation structurée vise à supprimer les instructions
gotodes programmes impératifs 3. Les boucles et les conditionnelles sont au contraire les structures de contrôle qui la remplacent. -
Le paradigme concurrent permet à un même programme de mener des tâches simultanées et fait intervenir les threads ; des langages comme Java ou C++ permettent de créer et de manipuler ces threads 4. Les variables restent permises : croire le contraire revient à confondre concurrence et programmation fonctionnelle pure, qui, elle, écarte les effets de bord.
-
On calcule 1 + 4 + 9 = 14. La fonction est récursive et sans effet de bord : chaque appel renvoie une valeur, aucune variable n'est modifiée. Oublier le carré donne 6, ce qui serait la somme simple des éléments.
-
Modifier un objet existant hors de la fonction est un effet de bord, que le paradigme fonctionnel pur interdit 3. Une fonction pure ne ferait que renvoyer une nouvelle valeur : la première réponse est donc fausse.
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
- Programmes et ressources - Numérique et Sciences Informatiques (voie générale), Ministère de l'Éducation nationale / Éduscol. Consulté le 7 novembre 2026.
- Spécialité NSI - Numérique et Sciences Informatiques, Éduscol STI. Consulté le 7 novembre 2026.
- Paradigme (programmation), Wikipédia. Consulté le 7 novembre 2026.
- 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.