Impératif et objet
Progression
#Impératif et objet
État et contrôle de flux; encapsulation, héritage, composition; SOLID (aperçu).
Objectifs d’apprentissage
- Distinguer encapsulation, héritage, composition; préférer la composition pour limiter le couplage.
- Appliquer SRP/OCP à petite échelle (fonctions/classes focalisées, extensions sans modifications risquées).
- Expliquer l’impact des états partagés et des effets de bord sur la testabilité.
#Exemple OO simple (Python)
Chargement de l’éditeur...
Principes: encapsulation (état privé via conventions), invariants (solde ≥ 0), et méthodes cohérentes.
Héritage vs composition
Préférer la composition (« a un ») à l’héritage (« est un ») pour partager des comportements sans créer de hiérarchies fragiles. L’héritage pour des relations d’is‑a claires et stables.
#Pièges fréquents
- Constructeurs lourds avec I/O; préférer injection de dépendances et adapters.
- États globaux cachés (singletons mal maîtrisés) → tests fragiles.
- Méthodes trop longues: extraire des fonctions privées et documenter invariants.
#Mini‑quiz
Laquelle favorise le faible couplage ?
#Exercice : Hiérarchie de formes géométriques
Implémentez une hiérarchie de classes pour des formes géométriques en utilisant l'héritage et le polymorphisme.
#Instructions
- Créez une classe de base abstraite
Forme
avec une méthode abstraiteaire()
. - Créez des classes dérivées
Rectangle
,Cercle
, etTriangle
qui implémentent la méthodeaire()
. - Ajoutez une méthode
description()
dans la classe de base qui retourne une description de la forme. - Utilisez le polymorphisme pour stocker différentes formes dans une liste et calculer leurs aires.
#Exemple de code
pythonpython
1from abc import ABC, abstractmethod2import math3 4class Forme(ABC):5 @abstractmethod6 def aire(self):7 pass8 9 def description(self):10 return f"Cette forme a une aire de {self.aire()} unités carrées."11 12class Rectangle(Forme):13 def __init__(self, largeur, hauteur):14 self.largeur = largeur
Chargement de l’éditeur...