Interface segregation
Lección 25 de 28 del curso Clean Code - Write better code using Python de Coddy.
"Muchas interfaces específicas para clientes son mejores que una única 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 interfaz tiene múltiples responsabilidades!
Y tendremos problemas al implementarla:
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 los 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
Walkable, que tiene una única función abstractawalk(self) - Crea la clase abstracta
Swimable, que tiene una única función abstractaswim(self)
¡No cambies el código proporcionado!
Observa que ahora cada interfaz tiene una única 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")
Todas las lecciones de Clean Code - Write better code using Python
Practica por tu cuenta: Compilador de Python online