Segregação de interface
Lição 25 de 28 do curso Clean Code - Escreva códigos melhores com Python da Coddy.
"Muitas interfaces específicas do cliente são melhores do que uma interface de propósito geral."
Uma interface é uma descrição de comportamentos que um objeto pode realizar.
O princípio de segregação de interface afirma que uma interface deve ser o menor possível em termos de coesão. Em outras palavras, ela deve fazer apenas UMA coisa.
Vejamos um exemplo ruim e como vamos corrigi-lo,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passEsta é uma interface com múltiplas responsabilidades!
E teremos problemas ao implementar isso,
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 você pode ver, esta interface não é compatível com animais que não podem caminhar e nadar!
Desafio
FácilVamos corrigir o exemplo acima implementando as classes Walkable e Swimable, você recebeu as classes Frog e Giraffe que implementam as novas classes
Tarefas:
- Crie a classe abstrata
Walkableque possui apenas uma função abstratawalk(self) - Crie a classe abstrata
Swimableque possui apenas uma função abstrataswim(self)
Não altere o código fornecido!
Observe que agora cada interface tem apenas uma responsabilidade e segue o princípio
Experimente você mesmo
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")