Numérique et Sciences Informatiques > Préparation aux Épreuves du Baccalauréat NSI > Révisions Thématiques > Langages de programmation
Révision Programmation Orientée Objet (POO) en Python pour le Bac NSI
Un guide complet sur la Programmation Orientée Objet (POO) en Python, un concept essentiel pour réussir le Bac NSI. Explorez les notions de classes, objets, héritage, polymorphisme et encapsulation avec des explications claires, des exemples pratiques et des exercices pour vous préparer efficacement.
Introduction à la Programmation Orientée Objet (POO)
La Programmation Orientée Objet (POO) est un paradigme de programmation qui consiste à organiser le code en regroupant les données (attributs) et les actions (méthodes) qui les manipulent au sein d'entités appelées objets. L'objectif est de rendre le code plus modulaire, réutilisable, et facile à comprendre. Les Concepts Clés de la POO: * Classes : Modèles ou plans pour créer des objets. Une classe définit les attributs et les méthodes que les objets de cette classe auront. * Objets : Instances d'une classe. Chaque objet a ses propres valeurs pour les attributs définis dans la classe. * Attributs : Données associées à un objet (par exemple, le nom, l'âge, la couleur). * Méthodes : Fonctions associées à un objet qui définissent son comportement (par exemple, se déplacer, parler, manger). * Héritage : Mécanisme permettant à une classe d'hériter des attributs et des méthodes d'une autre classe (la classe parente ou classe de base). Cela favorise la réutilisation du code et la création de hiérarchies de classes. * Polymorphisme : Capacité d'un objet à prendre plusieurs formes. Par exemple, une méthode peut avoir un comportement différent selon la classe de l'objet qui l'appelle. * Encapsulation : Principe consistant à cacher les détails internes d'un objet et à exposer uniquement une interface publique. Cela permet de protéger les données et de simplifier l'utilisation de l'objet.
Classes et Objets en Python
En Python, on définit une classe avec le mot-clé `class`. La syntaxe est la suivante: python class NomDeLaClasse: # Attributs de la classe # Méthodes de la classe Exemple: python class Voiture: # Attributs couleur = "rouge" marque = "Renault" # Méthodes def demarrer(self): print("La voiture démarre !") def accelerer(self): print("La voiture accélère !") Pour créer un objet (une instance) de la classe, on utilise la syntaxe suivante: python nom_de_l_objet = NomDeLaClasse() Exemple: python ma_voiture = Voiture() print(ma_voiture.couleur) # Affiche "rouge" ma_voiture.demarrer() # Affiche "La voiture démarre !" La méthode `__init__` (constructeur) est une méthode spéciale qui est appelée automatiquement lors de la création d'un objet. Elle permet d'initialiser les attributs de l'objet. python class Voiture: def __init__(self, couleur, marque): self.couleur = couleur self.marque = marque def demarrer(self): print(f"La {self.marque} démarre !") ma_voiture = Voiture("bleue", "Peugeot") print(ma_voiture.couleur) # Affiche "bleue" ma_voiture.demarrer() # Affiche "La Peugeot démarre !"
Héritage en Python
L'héritage permet de créer une nouvelle classe (classe enfant ou sous-classe) à partir d'une classe existante (classe parente ou super-classe). La classe enfant hérite des attributs et des méthodes de la classe parente, et peut ajouter de nouveaux attributs et méthodes, ou redéfinir des méthodes existantes. python class ClasseEnfant(ClasseParente): # Nouvel attributs et méthodes # Redéfinition de méthodes Exemple: python class Vehicule: def __init__(self, marque): self.marque = marque def se_deplacer(self): print("Le véhicule se déplace.") class Voiture(Vehicule): def __init__(self, marque, nombre_portes): super().__init__(marque) # Appel du constructeur de la classe parente self.nombre_portes = nombre_portes def se_deplacer(self): print("La voiture roule.") ma_voiture = Voiture("Citroen", 5) print(ma_voiture.marque) # Affiche "Citroen" print(ma_voiture.nombre_portes) # Affiche 5 ma_voiture.se_deplacer() # Affiche "La voiture roule." (méthode redéfinie) Dans cet exemple, la classe `Voiture` hérite de la classe `Vehicule`. Elle hérite de l'attribut `marque` et de la méthode `se_deplacer`. Elle redéfinit la méthode `se_deplacer` pour afficher un message spécifique aux voitures.
Polymorphisme et Encapsulation
Polymorphisme: Le polymorphisme permet à des objets de classes différentes d'être traités de la même manière. Par exemple, vous pouvez avoir une liste d'objets de différentes classes (Voiture, Moto, Vélo) et appeler la méthode `se_deplacer()` sur chaque objet. Chaque objet exécutera sa propre version de la méthode `se_deplacer()`. Exemple: python class Animal: def faire_du_bruit(self): print("Bruit générique") class Chien(Animal): def faire_du_bruit(self): print("Wouf !") class Chat(Animal): def faire_du_bruit(self): print("Miaou !") animal1 = Chien() animal2 = Chat() animal1.faire_du_bruit() # Affiche "Wouf !" animal2.faire_du_bruit() # Affiche "Miaou !" Encapsulation: L'encapsulation consiste à masquer les détails internes d'un objet et à exposer uniquement une interface publique. En Python, on peut utiliser la convention de préfixer les attributs et les méthodes avec un ou deux underscores (`_` ou `__`) pour indiquer qu'ils sont destinés à être utilisés en interne et ne devraient pas être accédés directement depuis l'extérieur de la classe. Bien que Python ne possède pas de mécanisme d'encapsulation strict comme dans certains autres langages, cette convention permet de signaler l'intention du développeur. python class CompteBancaire: def __init__(self, solde): self._solde = solde # Attribut "protégé" def deposer(self, montant): self._solde += montant def get_solde(self): return self._solde
Ce qu'il faut retenir
FAQ
-
Quelle est la différence entre une classe et un objet ?
Une classe est un modèle ou un plan pour créer des objets. Un objet est une instance d'une classe. Pensez à une classe comme à un plan de maison, et à un objet comme à une maison construite à partir de ce plan. -
Pourquoi utiliser la POO ?
La POO permet d'organiser le code, de le rendre plus modulaire, réutilisable, et facile à comprendre. Elle facilite la création d'applications complexes et la maintenance du code.