Interface segregation
Lección 25 de 28 del curso Clean Code - Write better code using Python de Coddy.
"Muchas interfaces específicas de cliente son mejores que una interfaz de propósito general."
Una interfaz es una descripción de los comportamientos que un objeto puede realizar.
El principio de segregación de interfaces establece que una interfaz debe ser lo más pequeña posible en términos de cohesión. En otras palabras, solo debe hacer UNA cosa.
Veamos un mal ejemplo y lo corregiremos,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
pass¡Esta es una interfaz con múltiples responsabilidades!
Y tendremos problemas al implementar esto,
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!")¡Como puedes ver, esta interfaz no es compatible con animales que no pueden caminar y nadar!
Desafío
FácilVamos a corregir el ejemplo anterior implementando las clases Walkable y Swimable, se te proporcionan las clases Frog y Giraffe que implementan las nuevas clases
Tareas:
- Crea la clase abstracta
Walkableque tenga solo una función abstractawalk(self) - Crea la clase abstracta
Swimableque tenga solo una función abstractaswim(self)
¡No cambies el código proporcionado!
Observa que ahora cada interfaz tiene una sola responsabilidad y sigue el principio
Pruébalo tú mismo
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")