Ségrégation des interfaces
Leçon 25 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.
"Plusieurs interfaces spécifiques aux clients valent mieux qu'une seule interface à usage général."
Une interface est une description des comportements qu'un objet peut adopter.
Le principe de ségrégation des interfaces stipule qu'une interface doit être aussi petite que possible en termes de cohésion. En d'autres termes, elle ne doit faire qu'UNE SEULE chose.
Voyons un mauvais exemple et nous allons le corriger,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passC'est une interface avec plusieurs responsabilités !
Et nous aurons un problème lors de l'implémentation de ceci,
class Frog(Animal):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Animal):
def walk(self):
print("Walking")
def swim(self):
raise Exception("Girrafe cannot swim!")Comme vous pouvez le voir, cette interface n'est pas compatible avec les animaux qui ne peuvent pas à la fois marcher et nager !
Défi
FacileRéparons l'exemple ci-dessus en implémentant les classes Walkable et Swimable, on vous donne les classes Frog et Giraffe qui implémentent les nouvelles classes
Tâches :
- Créez la classe abstraite
Walkablequi n'a qu'une seule fonction abstraitewalk(self) - Créez la classe abstraite
Swimablequi n'a qu'une seule fonction abstraiteswim(self)
Ne modifiez pas le code donné !
Remarquez que maintenant chaque interface n'a qu'une seule responsabilité et respecte le principe
Essayez vous-même
from abc import ABC, abstractmethod
# Enter you code here
class Frog(Walkable, Swimable):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Walkable):
def walk(self):
print("Walking")
if __name__ == "__main__":
animal_type = input()
if animal_type == "frog":
animal = Frog()
animal.walk()
animal.swim()
elif animal_type == "giraffe":
animal = Giraffe()
animal.walk()
print("not Swimming")