Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
SRP : Responsabilité unique
Le premier principe SOLID est le Single Responsibility Principle (SRP) : une classe ne doit avoir qu'une seule raison de changer. Autrement dit, elle ne fait qu'une seule chose.
Imagine un couteau suisse : il coupe, il visse, il ouvre les bouteilles. C'est pratique, mais si la lame casse, tu ne peux plus rien faire. En programmation, on prefere avoir un couteau, un tournevis et un ouvre-bouteille séparés.
Exemple de violation :
class Employe: def calculer_salaire(self): ... # logique metier def sauvegarder(self): ... # acces base de données def generer_rapport(self): ... # formatage
Trois raisons de changer dans la meme classe. Si le format du rapport change, on touche a la classe Employe. Pas bien.
Refactorise en separant les responsabilites : - Rapport(titre, données) : contient uniquement les données du rapport - FormatteurRapport : méthode formater(rapport) retourne '{titre}\n{données}' - CalculateurRapport : méthode calculer_moyenne(rapport) retourne la moyenne des données (liste de nombres)
Exemple : r = Rapport('Ventes', [10, 20, 30]) FormatteurRapport().formater(r) # 'Ventes\n[10, 20, 30]' CalculateurRapport().calculer_moyenne(r) # 20.0
Tests (2/4)
Formater
r = Rapport('Ventes', [10, 20, 30])
f = FormatteurRapport()
assert f.formater(r) == 'Ventes\n[10, 20, 30]'
Moyenne
r = Rapport('Stats', [10, 20, 30])
c = CalculateurRapport()
assert c.calculer_moyenne(r) == 20.0
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
class Rapport:
def __init__(self, titre, données):
self.titre = titre
self.données = données
class FormatteurRapport:
def formater(self, rapport):
return f'{rapport.titre}\n{rapport.données}'
class CalculateurRapport:
def calculer_moyenne(self, rapport):
if not rapport.données:
return 0
return sum(rapport.données) / len(rapport.données)