Exercices Architecture & Patterns OCP : Ouvert/Fermé
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

OCP : Ouvert/Fermé

Le principe Open/Closed dit qu'un code doit etre ouvert a l'extension mais ferme a la modification. En clair : tu peux ajouter de nouveaux comportements sans modifier le code existant.

Comment ? Grace au polymorphisme. Au lieu d'avoir des if/elif qui testent le type :

# MAUVAIS : il faut modifier a chaque nouveau type
if type == 'pourcentage':
remise = prix * taux / 100
elif type == 'montant':
remise = montant

On crée des classes avec la meme interface :

# BON : on ajoute juste une nouvelle classe
class NouvelleRemise(Remise):
def calculer(self, prix): ...

Crée un système de remises extensible :
- Remise (classe de base) avec calculer(prix) retournant 0
- RemisePourcentage(taux) : retourne prix * taux / 100
- RemiseMontant(montant) : retourne min(montant, prix)
- RemiseVip(taux) : 10% supplémentaires, donc prix * (taux + 10) / 100
- CalculateurPrix avec appliquer_remise(prix, remise) retournant prix - remise.calculer(prix)

Pour ajouter une remise, on crée une sous-classe. On ne modifie jamais CalculateurPrix.

Exemple :
c = CalculateurPrix()
c.appliquer_remise(100, RemisePourcentage(20)) # 80.0
c.appliquer_remise(100, RemiseMontant(15)) # 85

Tests (3/4)

Remise pourcentage
c = CalculateurPrix()
assert c.appliquer_remise(100, RemisePourcentage(20)) == 80.0
Remise montant
c = CalculateurPrix()
assert c.appliquer_remise(100, RemiseMontant(15)) == 85
Remise VIP
c = CalculateurPrix()
assert c.appliquer_remise(100, RemiseVip(10)) == 80.0

+ 0 tests cachés

Indices (3 disponibles)

solution.py