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 para clientes são melhores do que uma única interface de propósito geral."
Uma interface é uma descrição dos comportamentos que um objeto pode executar.
O princípio da segregação de interfaces afirma que uma interface deve ser tão pequena quanto possível em termos de coesão. Em outras palavras, ela deve fazer apenas UMA coisa.
Vamos ver um exemplo ruim e 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 um problema ao implementá-la,
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 andar e nadar!
Desafio
FácilVamos corrigir o exemplo acima implementando as classes Walkable e Swimable; são fornecidas as classes Frog e Giraffe, que implementam as novas classes
Tarefas:
- Crie a classe abstrata
Walkable, que tem apenas uma função abstratawalk(self) - Crie a classe abstrata
Swimable, que tem 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")
Todas as lições de Clean Code - Escreva códigos melhores com Python
Pratique por conta própria: Compilador de Python online