CoursNumérique et sciences informatiques · tle
Comment écrire des programmes plus puissants et mieux organisés ? La spécialité NSI de terminale approfondit la programmation avec deux notions clés : la récursivité et la programmation orientée objet.
Le cours
La récursivité est une technique de programmation puissante et élégante, dans laquelle une fonction s'appelle elle-même pour résoudre un problème. Bien qu'elle puisse sembler déroutante au premier abord, elle permet de résoudre simplement de nombreux problèmes.
L'idée de la récursivité est de résoudre un problème en le ramenant à une version plus petite du même problème, jusqu'à atteindre un cas simple que l'on sait résoudre directement (le cas de base). Par exemple, pour calculer la factorielle d'un nombre, on peut dire que « factorielle de n » vaut « n multiplié par factorielle de n−1 », en s'arrêtant à factorielle de 0 qui vaut 1. La fonction s'appelle ainsi elle-même avec une valeur plus petite, jusqu'au cas de base. Il est essentiel qu'un cas de base existe, sans quoi les appels se poursuivraient indéfiniment.
Comprendre la récursivité est important, car elle offre une manière naturelle et concise de résoudre de nombreux problèmes, notamment ceux ayant une structure « emboîtée ». C'est un concept fondamental de la programmation. La récursivité est approfondie dans le supérieur, en informatique et en algorithmique, où elle est au cœur de nombreuses techniques (comme « diviser pour régner »).
Calculer une factorielle peut se faire de façon récursive (en s'appuyant sur le cas précédent).
Pour bien maîtriser la récursivité, il faut comprendre précisément comment elle fonctionne : comment les appels successifs s'enchaînent et se résolvent. Ce mécanisme repose sur deux éléments indispensables et sur une exécution en deux temps.
Toute fonction récursive repose sur deux éléments : un ou plusieurs cas de base, qui donnent directement le résultat sans nouvel appel, et un cas récursif, qui appelle la fonction sur un problème plus petit. L'exécution se déroule en deux phases : d'abord une phase de « descente », où les appels s'empilent jusqu'à atteindre le cas de base ; puis une phase de « remontée », où les résultats sont combinés en revenant en arrière. Les appels en attente sont gérés par une pile (structure « dernier arrivé, premier sorti »). Sans cas de base correct, la récursion ne s'arrête jamais : c'est l'erreur la plus fréquente.
Comprendre le principe de la récursivité (cas de base, cas récursif, empilement des appels) est essentiel pour l'utiliser correctement et éviter les erreurs. Ce mécanisme éclaire aussi le fonctionnement interne des programmes. Il est approfondi dans le supérieur, en algorithmique, où l'analyse des fonctions récursives et de leur efficacité tient une place importante.
Le cas de base arrête la récursivité ; sans lui, les appels seraient infinis.
La programmation orientée objet (POO) est une façon d'organiser les programmes très largement utilisée dans le développement logiciel moderne. Elle propose de structurer le code autour d'« objets », qui regroupent des données et les opérations qui s'y appliquent.
L'idée de la POO est de modéliser les éléments d'un programme comme des objets, à l'image des objets du monde réel. Chaque objet possède des caractéristiques (ses données, appelées attributs) et des comportements (les opérations qu'il peut effectuer, appelées méthodes). Par exemple, un objet « compte bancaire » aurait un attribut « solde » et des méthodes « déposer » et « retirer ». Cette organisation permet de regrouper logiquement ce qui va ensemble, de mieux structurer les programmes complexes, et de réutiliser du code. La POO facilite ainsi la conception et la maintenance des grands logiciels.
Comprendre la programmation objet est essentiel, car elle est au cœur du développement logiciel actuel : la plupart des grands programmes et applications sont conçus ainsi. C'est un paradigme fondamental. Il est approfondi dans le supérieur, en informatique, où la programmation objet et ses principes constituent un enseignement majeur pour la conception de logiciels.
Une classe « Voiture » définit des attributs (couleur, vitesse) et des méthodes (démarrer).
Au cœur de la programmation orientée objet se trouvent deux notions complémentaires : les classes et les objets. Bien les distinguer est essentiel pour comprendre et pratiquer cette façon de programmer.
Une classe est un modèle, une sorte de « plan de construction » qui décrit ce que seront les objets d'un certain type : quels attributs (données) et quelles méthodes (opérations) ils possèdent. Un objet est une réalisation concrète d'une classe, créée à partir de ce modèle (on parle d'instance). Par exemple, la classe « Élève » décrit qu'un élève a un nom et une moyenne ; à partir de cette classe, on peut créer autant d'objets élèves que nécessaire, chacun avec ses propres valeurs. La classe définit donc la structure commune, et les objets sont les exemplaires individuels qui en découlent.
Comprendre la distinction entre classe (le modèle) et objet (l'exemplaire) est fondamental en programmation orientée objet. C'est la base de la conception de programmes structurés. Ces notions sont approfondies dans le supérieur, en informatique, où la programmation objet — avec ses concepts avancés — est un pilier de la conception logicielle et un savoir-faire très recherché.
À partir de la classe « Voiture », on crée des objets : une voiture rouge, une voiture bleue…
Une fonction récursive s'appelle elle-même sur un problème plus petit, jusqu'à atteindre un cas de base qui arrête la répétition. Sans ce cas de base, la fonction s'appellerait indéfiniment.
La récursivité offre des solutions élégantes à certains problèmes (parcours d'arbres, calculs mathématiques) qui seraient plus lourds à écrire autrement.
La POO organise le programme autour d'objets, qui regroupent des données (attributs) et des fonctions (méthodes). Une classe sert de modèle, à partir duquel on crée des objets.
Cette approche permet de structurer de grands programmes, de réutiliser du code et de modéliser des entités du monde réel (un utilisateur, un compte, un véhicule). Elle est très répandue dans le développement logiciel.
Écrire une fonction récursive qui calcule la factorielle d'un entier (n! = n × (n−1) × … × 1).
Récursivité et programmation orientée objet illustrent la diversité des « paradigmes » de programmation. Un bon développeur sait choisir l'approche adaptée à chaque problème. Découvrir ces différentes façons de penser un programme enrichit la compréhension de l'informatique et développe la souplesse intellectuelle.
Ce qu'il faut absolument retenir
Vérifie ta compréhension
Exercice 1Qu'est-ce qu'une fonction récursive ?
Une fonction récursive est une fonction qui s'appelle elle-même pour résoudre un problème en le simplifiant.
Exercice 2Que doit toujours comporter une récursivité ?
Une récursivité doit comporter un cas de base (qui arrête les appels) ; sans lui, les appels seraient infinis.
Exercice 3Qu'est-ce qu'une classe en programmation objet ?
Une classe est un modèle qui décrit un type d'objet ; un objet en est une réalisation concrète.
Exercice 4En programmation objet, un objet regroupe des données (attributs) et des actions (méthodes).
Vrai : la programmation orientée objet organise le code autour d'objets qui regroupent attributs et méthodes.
Exercice 5Pourquoi le cas de base est-il indispensable dans une fonction récursive ?
Une fonction récursive s'appelle elle-même en ramenant le problème à un cas plus simple. Le cas de base est le cas le plus simple, pour lequel la fonction donne directement une réponse sans se rappeler. Il est indispensable car c'est lui qui arrête la chaîne d'appels : sans cas de base, la fonction continuerait à s'appeler indéfiniment, ce qui provoquerait une boucle infinie. Le cas de base garantit donc que la récursivité se termine.
L'essentiel en images