Aller au contenu principal

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 ?
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

  1. Créez une classe de base abstraite Forme avec une méthode abstraite aire().
  2. Créez des classes dérivées Rectangle, Cercle, et Triangle qui implémentent la méthode aire().
  3. Ajoutez une méthode description() dans la classe de base qui retourne une description de la forme.
  4. 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...