Numérique et sciences informatiques (spécialité) · TerminaleBac
Programmation orientée objet : cours de NSI Terminale
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- La programmation orientée objet (POO) organise un programme en objets qui ont une structure interne et un comportement, et qui interagissent entre eux.
- Une classe est le modèle ; un objet (ou instance) est créé à partir de ce modèle. Il en reçoit les caractéristiques (attributs) et les comportements (méthodes).
- En Python :
classdéfinit le modèle,__init__initialise les attributs,selfdésigne l'objet courant, etClasse(...)crée une instance. - Une méthode se lit
objet.methode(...): elle agit sur les attributs de cet objet précis. - Encapsulation : on manipule l'objet par ses méthodes plutôt qu'en modifiant directement ses attributs.
- Modéliser avant de coder : choisir les objets, leurs attributs et leurs méthodes est l'étape la plus importante.
Pourquoi parler d'objets ?
Jusqu'ici, tu as sans doute écrit des programmes avec des variables et des fonctions : une donnée d'un côté, des instructions qui la transforment de l'autre. Cette façon de faire marche très bien pour de petits programmes. Quand un programme grossit, on se retrouve vite avec des dizaines de variables dispersées et des fonctions qui doivent toutes savoir comment ces variables sont organisées.
La programmation orientée objet, abrégée POO, propose une autre organisation. Le programme est construit à partir de briques logicielles, les objets, que l'on fait dialoguer entre elles. 3 Chaque objet modélise une idée, un concept ou un élément du monde physique : un véhicule, une personne, la page d'un livre. 3 Au lieu de séparer les données et les traitements, on les regroupe dans une même brique.
Le programme de terminale de NSI mentionne la programmation objet dans deux rubriques : « Structures de données » et « Langages et programmation ». 1 C'est un paradigme, c'est-à-dire une manière de penser et d'organiser un programme, au même titre que la programmation impérative que tu connais déjà. 3 2
Dans ce cours, tu vas apprendre à lire et à écrire des classes en Python, à créer des objets, à utiliser leurs méthodes et à comprendre pourquoi cette organisation rend un programme plus clair. Les chapitres suivants du programme (listes chaînées, piles et files, dictionnaires) s'appuieront sur cette façon de construire des structures de données : tu retrouveras donc souvent des classes.
Qu'est-ce qu'un objet ?
Cette définition contient l'idée centrale : un objet réunit deux choses.
- des informations : ce que l'objet est ou connaît. On les appelle les attributs. Pour un élève : son nom, sa classe, ses notes.
- des mécanismes : ce que l'objet sait faire. On les appelle les méthodes. Pour un élève : calculer sa moyenne, changer de classe.
Un objet a donc une organisation interne et une conduite propre, et il échange avec les autres objets. 3 L'ensemble des attributs à un instant donné s'appelle l'état de l'objet.
Classe et instance : le modèle et ses exemplaires
Fabriquer un objet à la main, attribut par attribut, serait pénible si tu as besoin de mille comptes bancaires. On décrit donc une seule fois ce qu'ont en commun tous les comptes, puis on en crée autant que l'on veut.
Une comparaison utile : la classe est le plan de construction d'une maison, l'objet est une maison bâtie d'après ce plan. Avec un seul plan, on construit autant de maisons que l'on veut ; chacune a ses propres meubles, sa propre couleur de volets. Modifier les volets d'une maison ne change ni le plan ni les autres maisons.
Les caractéristiques et comportements d'une classe s'inspirent en général des choses réelles que l'on veut représenter : une personne, un dossier, un produit. 4
POO
- Classe
- Modèle
- Nom en majuscule
- __init__
- Objet
- Instance
- État
- Interagit
- Attributs
- Données
- self.nom
- Valeurs propres
- Méthodes
- Actions
- self en premier
- objet.methode()
- Encapsulation
- Interface
- État protégé
- Cohérence
Écrire une classe en Python
Python est l'un des langages qui permettent la programmation orientée objet. 3 Le programme de NSI s'appuie sur Python en version 3 ou supérieure. 2 Voici la première classe que nous allons étudier ligne par ligne.
Décortiquons ce code.
class CompteBancaire:déclare une nouvelle classe. Par convention, son nom commence par une majuscule.def __init__(self, titulaire, solde):définit le constructeur. Python l'appelle automatiquement à chaque création d'un objet. Il reçoit les valeurs de départ.selfest le premier paramètre de toutes les méthodes. Il désigne l'objet sur lequel la méthode travaille. Tu ne le passes pas toi-même lors de l'appel : Python le fournit.self.titulaire = titulairecrée un attribut de l'objet et lui donne sa valeur. Le point sert à accéder à ce qui appartient à l'objet.deposer,retirer,affichersont des méthodes : des fonctions écrites à l'intérieur de la classe.
Créer des objets et appeler leurs méthodes
Une fois la classe définie, on crée des objets en appelant la classe comme une fonction. On donne les arguments attendus par __init__, sans self.
Dans l'appel compte_lina.deposer(100), la notation pointée se lit : « demande à l'objet compte_lina d'exécuter sa méthode deposer avec le montant 100 ». Python transmet compte_lina au paramètre self. Dans le vocabulaire de la programmation objet, on dit aussi qu'on envoie un message à l'objet. 3
Tu peux lire un attribut avec la même notation : compte_lina.solde vaut 350. Chaque objet garde son propre état : il y a deux soldes distincts en mémoire, un par instance.
Méthodes qui renvoient une valeur et objets qui en contiennent d'autres
Une méthode se comporte comme une fonction : elle peut recevoir des paramètres, effectuer des calculs et renvoyer une valeur avec return. Celles qui servent à consulter l'état sans le modifier s'appellent souvent des accesseurs.
Un attribut peut lui-même être un objet, ou une structure de données comme une liste. Cela permet de construire des modèles riches : une classe Eleve peut contenir une liste de notes, une classe Bibliotheque une liste d'objets Livre. C'est précisément cette idée qui servira à construire les listes chaînées, les piles et les files des chapitres suivants.
Encapsulation et interface d'une classe
Reprenons le compte bancaire. Rien n'empêche, en Python, d'écrire compte_karim.solde = -5000 depuis n'importe où dans le programme. On contourne alors la vérification faite dans retirer, et l'objet se retrouve dans un état absurde.
L'encapsulation est l'un des principes de la programmation par objets. 3 Son idée : l'objet protège son état interne, et le reste du programme ne le modifie qu'en passant par les méthodes que la classe propose. Ces méthodes forment l'interface de la classe : ce qu'on a le droit d'utiliser sans connaître le détail du fonctionnement interne.
Par convention, en Python, on signale qu'un attribut est réservé à l'usage interne de la classe en faisant commencer son nom par un tiret bas : self._solde. Ce n'est qu'une convention de lecture, qui indique aux autres programmeurs « ne touche pas directement ». On propose alors des méthodes d'accès, par exemple consulter().
class CompteBancaire:
def __init__(self, titulaire, solde):
self.titulaire = titulaire
self._solde = solde
def consulter(self):
return self._solde
def deposer(self, montant):
if montant > 0:
self._solde = self._solde + montant
Modéliser : de l'énoncé aux classes
La difficulté principale n'est pas la syntaxe, mais le choix des objets. Il s'agit de représenter les objets et leurs relations : c'est leur interaction qui permet de réaliser les fonctionnalités attendues. 3 L'étape de modélisation a donc une importance majeure. 3 On parle d'ailleurs d'analyse et de conception orientées objet, qui précèdent l'écriture du code. 3
Un peu d'histoire et d'autres notions à connaître
Au milieu des années 1960, deux chercheurs norvégiens, Ole-Johan Dahl et Kristen Nygaard, ont lancé cette approche avec Simula 67, un langage qui offrait déjà les classes, les objets, l'héritage et le polymorphisme. 3 Alan Kay a repris ces principes dans Smalltalk et a donné son nom au paradigme. 3 Smalltalk a vu le jour en 1972 au centre de recherche de Xerox. 4
La POO a gagné en popularité en 1983 grâce à C++, un langage dont l'usage rappelle volontairement celui du C. 4 Java, conçu par Sun Microsystems en 1995, visait d'abord le développement d'applications pour le web. 4 Quant à la théorie qui décrit proprement ces principes, elle est plus tardive : elle se met en place au fil des années 1980, puis surtout dans la décennie suivante. 3
- Principes formalisés (années 1980-1990) (1980 – 1996)
- 1965
- 1967Simula 67 : classes, objets, héritage
- 1972Smalltalk créé par le centre de recherche Xerox
- 1983Sortie de C++ : la POO devient populaire
- 1995Java créé par Sun Microsystems
- 1996
Les principes de la programmation par objets cités pour Smalltalk sont : objet, encapsulation, messages, typage et polymorphisme. L'héritage est vu comme dérivé de ces principes ou comme une manière de les mettre en œuvre. 3 Dans Smalltalk, tout est objet, même les classes. 3
Pour aller plus loin que le strict programme, retiens l'intuition de ces deux notions :
- l'héritage : une classe peut en reprendre une autre pour la compléter. Une classe
Elevepourrait reprendre tout ce que définit une classePersonneet y ajouter ses notes ; - le polymorphisme : des objets de classes différentes peuvent répondre à une même méthode, chacun à sa façon.
La POO n'est pas réservée à Python : on la retrouve aussi en PHP, par exemple. 3 Elle sert aussi à bâtir des architectures de logiciels, comme le modèle MVC (Modèle Vue Contrôleur) en PHP, où les modèles représentent des objets. 3 La notion d'objet est de plus utilisée pour la conception de logiciels et pour les bases de données orientées objet, qui stockent durablement des objets. 4
- NommerUn nom commun, au singulier, avec une majuscule.
- AttributsLister les données que chaque objet doit garder.
- ConstructeurÉcrire __init__ et affecter self.attribut.
- MéthodesÉcrire les actions, avec self en premier.
- InstancierCréer des objets avec Classe(...) et les utiliser.
Exercices corrigés
Exercice 1 Suivre l'état d'un compte
On utilise la classe CompteBancaire du cours (méthodes deposer et retirer, ce dernier refusant un retrait supérieur au solde).
c = CompteBancaire("Inès", 100)
c.deposer(50)
c.retirer(30)
c.retirer(500)
Quelle est la valeur de c.solde à la fin ?
Indice 1
Suis la valeur de c.solde après chaque ligne.
Indice 2
Regarde la condition montant <= self.solde pour le dernier retrait.
Voir la correction pas à pas
Après la création,
c.soldevaut 100.c.deposer(50)ajoute 50 : le solde devient 150.c.retirer(30): 30 ≤ 150, le retrait est accepté, le solde devient 120.c.retirer(500): 500 > 120, la condition est fausse, rien ne change.Le solde final est donc 120.
Une méthode ne modifie que l'objet sur lequel on l'appelle, et seulement si ses conditions sont remplies. Le retrait trop grand est ignoré.
Exercice 2 Écrire et utiliser une classe Rectangle
On considère la classe Rectangle du cours (attributs largeur et hauteur, méthodes aire, perimetre et agrandir(facteur)).
r = Rectangle(5, 3)
r.agrandir(2)
- Quelles sont les dimensions de
raprès l'agrandissement ? - Quel est alors le périmètre renvoyé par
r.perimetre()?
Indice 1
agrandir multiplie les deux attributs par le facteur.
Indice 2
Le périmètre est 2 * (largeur + hauteur).
Voir la correction pas à pas
Au départ,
largeurvaut 5 ethauteurvaut 3.agrandir(2)multiplie chaque attribut par 2 : la largeur devient 10 et la hauteur 6.On applique
perimetre(): 2 × (10 + 6).Le calcul donne 2 × 16 = 32.
L'appel de agrandir a modifié l'état de l'objet ; la méthode perimetre lit ensuite les nouvelles valeurs. Le périmètre est 32.
Exercice 3 Modéliser une petite situation
Une école gère des élèves. Chaque élève a un nom et une liste de notes. On veut pouvoir ajouter une note et obtenir la moyenne.
- Écris la classe
Eleve. - On crée
e = Eleve("Sam"), puis on ajoute les notes 10, 14 et 15. Quelle valeur renvoiee.moyenne()?
Indice 1
La liste des notes doit être créée dans __init__.
Indice 2
La moyenne est la somme des notes divisée par leur nombre.
Voir la correction pas à pas
On écrit
__init__(self, nom)qui créeself.nom = nometself.notes = [].On écrit
ajouter_note(self, note)qui faitself.notes.append(note).On écrit
moyenne(self)qui renvoiesum(self.notes) / len(self.notes).Avec 10, 14 et 15 : la somme vaut 39 et il y a 3 notes.
La moyenne est 39 / 3 = 13.
La liste est un attribut de l'objet : chaque élève possède la sienne. La moyenne de Sam est 13.
Quiz
8 questions · correction immédiate · ton score reste sur ton appareil.
-
Un objet est fabriqué d'après un gabarit appelé classe. 4 Un objet est un exemplaire créé à partir de ce modèle, ce n'est donc pas la classe elle-même, et une classe n'est pas une fonction même si on l'appelle comme telle pour créer une instance.
-
selfreprésente l'objet courant : dansc.deposer(10),selfvautc. Le confondre avec la classe est tentant, mais chaque instance a ses propres attributs, accessibles parself. -
Il faut affecter à
self.nom.nom = nomne crée qu'une variable locale qui disparaît à la fin de__init__, etreturn nomn'a pas de sens dans un constructeur. -
b = ane copie pas l'objet :aetbdésignent la même instance. Le dépôt de 5 surbporte donc le solde à 15, visible aussi para. Croire quea.soldereste à 10 revient à imaginer deux objets distincts. -
Sans
return, Python renvoieNone. C'est pourquoix = r.agrandir(2)donneNonesiagrandirne fait que modifier les attributs : la méthode agit sur l'objet mais ne produit pas de résultat. -
L'encapsulation fait de l'objet le gardien de son état : les règles sont écrites une seule fois dans les méthodes. Elle ne change pas la vitesse d'exécution et n'empêche nullement de créer plusieurs instances.
Les questions qu'on se pose
Quelle différence entre une fonction et une méthode ?
Une méthode est une fonction écrite dans une classe, dont le premier paramètre est self. On l'appelle toujours sur un objet : objet.methode(...). Une fonction ordinaire s'appelle seule, sans objet.
Pourquoi `__init__` s'écrit-il avec deux tirets bas ?
C'est le nom que Python reconnaît pour le constructeur. Dès que tu écris MaClasse(...), Python crée l'objet puis appelle __init__ automatiquement. Avec un autre nom, ou avec un seul tiret bas, ce n'est plus le constructeur et les attributs ne sont pas créés.
Faut-il toujours utiliser des classes ?
Non. Pour un calcul simple, une fonction suffit. Les classes deviennent utiles quand plusieurs données forment un tout qui évolue (un compte, un élève, un livre) et qu'on en crée plusieurs exemplaires. Le choix dépend du problème à modéliser.
Qu'est-ce qui peut tomber au bac sur ce chapitre ?
Le programme de terminale mentionne la programmation objet dans les rubriques « Structures de données » et « Langages et programmation ». 1 On te demande typiquement de compléter ou d'écrire une classe, de dire quel est l'état d'un objet après une suite d'instructions, ou d'utiliser des objets dans un programme. Les chapitres sur les listes chaînées et les piles s'appuient sur ces compétences.
Comment savoir si une information doit être un attribut ou une méthode ?
Si c'est une donnée que l'objet garde en mémoire (un nom, un solde), c'est un attribut. Si c'est une action ou un calcul que l'objet réalise (déposer, calculer une aire), c'est une méthode. Une valeur calculable à partir d'autres attributs, comme l'aire d'un rectangle, est en général mieux placée dans une méthode.
Sources
- Langages et programmation - Structures de données et POO, Éduscol. Consulté le 7 novembre 2026.
- Formation NSI Terminale - Concepts POO, Université Grenoble Alpes. Consulté le 7 novembre 2026.
- Programmation orientée objet, Wikipédia. Consulté le 7 novembre 2026.
- Objet (informatique), 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.