Exercices Architecture & Patterns LSP : Substitution de Liskov
🎉

Bravo!

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

LSP : Substitution de Liskov

Le principe de substitution de Liskov dit qu'une sous-classe doit pouvoir remplacer sa classe parente partout ou celle-ci est utilisee, sans casser le programme.

Exemple de violation classique : le carre et le rectangle. Si Carre herite de Rectangle et qu'on modifie la largeur, la hauteur change aussi. Du code qui attend un Rectangle normal serait surpris.

Un autre exemple concret : les oiseaux. Tous les oiseaux se deplacent, mais tous ne volent pas. Si Pingouin herite d'OiseauVolant, on viole le LSP car un pingouin ne sait pas voler.

La bonne hierarchie :

Oiseau (se_deplacer)
|-- OiseauVolant (se_deplacer -> 'Je vole')
|-- Pingouin (se_deplacer -> 'Je nage')

Crée :
- Oiseau avec se_deplacer() retournant 'Je me deplace'
- OiseauVolant(Oiseau) qui surcharge se_deplacer() avec 'Je vole'
- Pingouin(Oiseau) qui surcharge se_deplacer() avec 'Je nage'
- Une fonction faire_deplacer(oiseau) qui appelle oiseau.se_deplacer()

faire_deplacer() doit fonctionner avec n'importe quel type d'oiseau.

Exemple :
faire_deplacer(OiseauVolant()) # 'Je vole'
faire_deplacer(Pingouin()) # 'Je nage'
faire_deplacer(Oiseau()) # 'Je me deplace'

Tests (3/4)

OiseauVolant
assert faire_deplacer(OiseauVolant()) == 'Je vole'
Pingouin
assert faire_deplacer(Pingouin()) == 'Je nage'
Oiseau base
assert faire_deplacer(Oiseau()) == 'Je me déplace'

+ 0 tests cachés

Indices (3 disponibles)

solution.py