Programmation orientée objet en Python
Introduction
La programmation orientée objet (POO) est un paradigme fondamental en informatique qui permet de structurer le code de manière plus modulaire et réutilisable. Dans ce chapitre, nous allons explorer les concepts clés de la POO en Python, tels que les classes, les objets, l'héritage et le polymorphisme. Ces notions sont essentielles pour développer des applications complexes et organisées, et elles sont largement utilisées dans l'industrie. La POO facilite également la maintenance et l'évolution du code, ce qui est crucial dans le cadre de projets de grande envergure.
1. Les classes et les objets
1.1 Qu'est-ce qu'une classe ?
Une classe est un modèle qui définit un type d'objet. Elle regroupe des attributs (caractéristiques) et des méthodes (comportements) qui lui sont associés. En Python, une classe est définie à l'aide du mot-clé `class`. Les classes permettent de créer des structures de données complexes et de représenter des concepts du monde réel dans le code.
1.2 Qu'est-ce qu'un objet ?
Un objet est une instance d'une classe. Lorsque nous créons un objet, nous utilisons la structure définie par la classe pour lui donner des valeurs spécifiques. Chaque objet peut avoir des attributs différents, même s'ils sont basés sur la même classe.
Exemple concret
Imaginons que nous souhaitons modéliser un étudiant. Nous pourrions créer une classe `Etudiant` comme suit :
```python
class Etudiant:
def __init__(self, nom, age):
self.nom = nom
self.age = age
def se_presenter(self):
print(f"Bonjour, je m'appelle {self.nom} et j'ai {self.age} ans.")
```
Ici, `__init__` est le constructeur de la classe, qui initialise les attributs de l'objet. Nous pouvons ensuite créer des objets :
```python
etudiant1 = Etudiant("Alice", 17)
etudiant1.se_presenter() # Affiche : Bonjour, je m'appelle Alice et j'ai 17 ans.
```
Mini-exercice
Créez une classe `Livre` qui a pour attributs `titre` et `auteur`. Ajoutez une méthode `afficher_info` qui affiche les informations du livre. Créez ensuite un objet de cette classe et affichez ses informations.
#### Correction
```python
class Livre:
def __init__(self, titre, auteur):
self.titre = titre
self.auteur = auteur
def afficher_info(self):
print(f"Titre : {self.titre}, Auteur : {self.auteur}")
livre1 = Livre("1984", "George Orwell")
livre1.afficher_info() # Affiche : Titre : 1984, Auteur : George Orwell
```
2. L'héritage
2.1 Qu'est-ce que l'héritage ?
L'héritage permet de créer une nouvelle classe à partir d'une classe existante. La nouvelle classe, appelée sous-classe, hérite des attributs et des méthodes de la classe parente, tout en pouvant ajouter ou modifier des fonctionnalités. Cela permet de réutiliser du code et de créer des hiérarchies de classes.
Exemple concret
Prenons notre classe `Etudiant` et créons une sous-classe `EtudiantBac` :
```python
class EtudiantBac(Etudiant):
def __init__(self, nom, age, mention):
super().__init__(nom, age)
self.mention = mention
def se_presenter(self):
super().se_presenter()
print(f"J'ai obtenu la mention {self.mention}.")
```
Nous pouvons créer un objet de `EtudiantBac` :
```python
etudiant_bac = EtudiantBac("Bob", 18, "Bien")
etudiant_bac.se_presenter() # Affiche : Bonjour, je m'appelle Bob et j'ai 18 ans. J'ai obtenu la mention Bien.
```
Cas pratique
Supposons que nous souhaitions modéliser des étudiants de différentes filières. Créez une classe `EtudiantScientifique` qui hérite de `Etudiant`, avec un attribut supplémentaire `specialite`. Ajoutez une méthode `se_presenter` qui affiche la spécialité de l'étudiant.
#### Correction
```python