Introduction à la Programmation Orientée Objet en Python
La Transition du Procédural vers l'Orienté Objet
Pour comprendre l'intérêt de la POO, comparons les approches procédurale et orientée objet dans un exemple concret : la gestion d'un compte bancaire.
Approche Procédurale
En programmation procédurale, nous utilisons des fonctions qui opèrent sur des données séparées :
# Procedural approach
# Bank account management
balance = 0
def deposit(amount):
global balance
if amount > 0:
balance += amount
return True
return False
def withdraw(amount):
global balance
if amount > 0 and balance >= amount:
balance -= amount
return True
return False
# Using the functions
deposit(100)
withdraw(30)
print(f"Balance: {balance}")
Approche Orientée Objet
En POO, nous encapsulons les données et les comportements dans une classe :
# Object-Oriented approach
class BankAccount:
def __init__(self):
self.__balance = 0
def deposit(self, amount):
if amount > 0:
self.__balance += amount
return True
return False
def withdraw(self, amount):
if amount > 0 and self.__balance >= amount:
self.__balance -= amount
return True
return False
def get_balance(self):
return self.__balance
# Using the class
account = BankAccount()
account.deposit(100)
account.withdraw(30)
print(f"Balance: {account.get_balance()}")
Avantages de l'Approche Orientée Objet
- Encapsulation : Les données (balance) sont protégées et accessibles uniquement via des méthodes contrôlées
- Réutilisabilité : Création facile de multiples comptes bancaires indépendants
- Maintenance : Code plus organisé et plus facile à modifier
- Extensibilité : Facilité d'ajout de nouvelles fonctionnalités via l'héritage
1. Objets : Les Briques de Base
Un objet est une unité qui combine des données (attributs) et des comportements (méthodes). Dans le monde réel, pensez à une voiture : elle a des attributs (couleur, marque) et des comportements (démarrer, accélérer).
# Exemple simple d'un objet voiture
my_car = Car("red", "Toyota")
my_car.start()
my_car.accelerate()
2. Classes : Le Plan de Construction
Une classe est un modèle pour créer des objets. Elle définit la structure et le comportement que les objets de ce type auront.
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand
def start(self):
print(f"The {self.brand} starts")
def accelerate(self):
print("Vrooom!")
3. Encapsulation : Protection des Données
L'encapsulation consiste à regrouper les données et les méthodes qui les manipulent, tout en contrôlant l'accès à ces données.
class BankAccount:
def __init__(self):
self.__balance = 0 # Private attribute
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def get_balance(self):
return self.__balance
4. Héritage : Réutilisation et Extension
L'héritage permet à une classe d'hériter des attributs et méthodes d'une autre classe, facilitant la réutilisation du code.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Cat(Animal):
def speak(self):
return f"{self.name} says meow!"
5. Polymorphisme : Flexibilité des Formes
Le polymorphisme permet à différentes classes d'avoir des méthodes de même nom mais avec des comportements différents.
def make_speak(animal):
print(animal.speak())
cat = Cat("Kitty")
dog = Dog("Rex")
make_speak(cat) # Output: Kitty says meow!
make_speak(dog) # Output: Rex says woof!
6. Abstraction : Simplification de la Complexité
L'abstraction permet de cacher les détails complexes et de montrer uniquement les fonctionnalités essentielles.
from abc import ABC, abstractmethod
class GeometricShape(ABC):
@abstractmethod
def calculate_area(self):
pass
class Rectangle(GeometricShape):
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
Points Clés à Retenir
- Les objets combinent données et comportements
- Les classes sont des modèles pour créer des objets
- L'encapsulation protège les données
- L'héritage permet la réutilisation du code
- Le polymorphisme offre de la flexibilité
- L'abstraction simplifie la complexité
Prochaines Étapes
- Approfondissement des concepts OOP
- Design Patterns en Python
- Projets pratiques
That's all folks