Aller au contenu

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 : class définit le modèle, __init__ initialise les attributs, self désigne l'objet courant, et Classe(...) 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

Les notions clés de la POOCarte mentale : au centre la programmation orientée objet, avec cinq branches : classe, objet, attributs, méthodes, encapsulation.ModèleNom en majuscule__init__ClasseInstanceÉtatInteragitObjetDonnéesself.nomValeurs propresAttributsActionsself en premierobjet.methode()MéthodesInterfaceÉtat protégéCohérenceEncapsulationPOO

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
Les notions clés de la POO · Les cinq idées à relier pour comprendre un programme objet.

É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.
  • self est 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 = titulaire crée un attribut de l'objet et lui donne sa valeur. Le point sert à accéder à ce qui appartient à l'objet.
  • deposer, retirer, afficher sont 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

Quelques dates de la programmation objetFrise de 1965 à 1996 avec Simula 67, Smalltalk, C++ et Java.Principes formalisés (années 1980-1990)196519961967Simula 67 : classes, objets, héritage1972Smalltalk créé par le centre de recherche Xerox1983Sortie de C++ : la POO devient populaire1995Java créé par Sun Microsystems
  • Principes formalisés (années 1980-1990) (1980 – 1996)
  1. 1965
  2. 1967Simula 67 : classes, objets, héritage
  3. 1972Smalltalk créé par le centre de recherche Xerox
  4. 1983Sortie de C++ : la POO devient populaire
  5. 1995Java créé par Sun Microsystems
  6. 1996
Quelques dates de la programmation objet · Repères historiques tirés des sources.

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 Eleve pourrait reprendre tout ce que définit une classe Personne et 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

Écrire une classe en cinq étapesCinq étapes : nommer, lister les attributs, écrire le constructeur, écrire les méthodes, instancier.1NommerUn nom commun, au singulier, avec une majuscule.2AttributsLister les données que chaque objet doit garder.3ConstructeurÉcrire __init__ et affecter self.attribut.4MéthodesÉcrire les actions, avec self en premier.5InstancierCréer des objets avec Classe(...) et les utiliser.
  1. NommerUn nom commun, au singulier, avec une majuscule.
  2. AttributsLister les données que chaque objet doit garder.
  3. ConstructeurÉcrire __init__ et affecter self.attribut.
  4. MéthodesÉcrire les actions, avec self en premier.
  5. InstancierCréer des objets avec Classe(...) et les utiliser.
Écrire une classe en cinq étapes · La démarche à suivre devant un énoncé.

Exercices corrigés

Exercice 1 Suivre l'état d'un compte

★☆☆Environ 8 min

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
  1. Après la création, c.solde vaut 100.

  2. c.deposer(50) ajoute 50 : le solde devient 150.

  3. c.retirer(30) : 30 ≤ 150, le retrait est accepté, le solde devient 120.

  4. c.retirer(500) : 500 > 120, la condition est fausse, rien ne change.

  5. 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

★★☆Environ 12 min

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)
  1. Quelles sont les dimensions de r après l'agrandissement ?
  2. 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
  1. Au départ, largeur vaut 5 et hauteur vaut 3.

  2. agrandir(2) multiplie chaque attribut par 2 : la largeur devient 10 et la hauteur 6.

  3. On applique perimetre() : 2 × (10 + 6).

  4. 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

★★★Environ 15 min

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.

  1. Écris la classe Eleve.
  2. On crée e = Eleve("Sam"), puis on ajoute les notes 10, 14 et 15. Quelle valeur renvoie e.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
  1. On écrit __init__(self, nom) qui crée self.nom = nom et self.notes = [].

  2. On écrit ajouter_note(self, note) qui fait self.notes.append(note).

  3. On écrit moyenne(self) qui renvoie sum(self.notes) / len(self.notes).

  4. Avec 10, 14 et 15 : la somme vaut 39 et il y a 3 notes.

  5. 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.

  1. Dans le vocabulaire de la POO, qu'est-ce qu'une classe ?

  2. Quel est le rôle de self dans une méthode ?

  3. Quelle ligne du constructeur crée correctement un attribut nom ?

  4. Après a = Compte("A", 10) puis b = a, puis b.deposer(5), quelle est la valeur de a.solde (on suppose que deposer ajoute le montant au solde) ?

  5. Quelles propositions décrivent correctement un objet ? (plusieurs réponses)

    Plusieurs réponses possibles.

  6. Une méthode qui se termine sans return renvoie la valeur None en Python.

  7. Quel est l'intérêt principal de l'encapsulation ?

  8. Quelle est l'origine de la POO d'après le cours ?

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

  1. Langages et programmation - Structures de données et POO, Éduscol. Consulté le 7 novembre 2026.
  2. Formation NSI Terminale - Concepts POO, Université Grenoble Alpes. Consulté le 7 novembre 2026.
  3. Programmation orientée objet, Wikipédia. Consulté le 7 novembre 2026.
  4. 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.

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