Ségrégation des interfaces
Leçon 25 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.
« De nombreuses interfaces propres à un client sont meilleures qu’une seule interface polyvalente. »
Une interface est une description des comportements qu’un objet peut avoir.
Le principe de séparation des interfaces affirme 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 corrigeons-le,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passIl s’agit d’une interface avec plusieurs responsabilités !
Et nous aurons un problème lors de son implémentation,
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 walk et swim !
Défi
FacileCorrigeons l’exemple ci-dessus en implémentant les classes Walkable et Swimable ; les classes Frog et Giraffe, qui implémentent les nouvelles classes, vous sont fournies.
Tâches :
- Créez la classe abstraite
Walkable, qui ne possède qu’une seule fonction abstraitewalk(self). - Créez la classe abstraite
Swimable, qui ne possède qu’une seule fonction abstraiteswim(self).
Ne modifiez pas le code fourni !
Remarquez que chaque interface n’a désormais 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")
Toutes les leçons de Clean Code - Écrire un meilleur code avec Python
Entraînez-vous par vous-même : Compilateur Python en ligne