Menu
Coddy logo textTech

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):
		pass

Esta é 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!

challenge icon

Desafio

Fácil

Vamos 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 Walkable que possui apenas uma função abstrata walk(self)
  • Crie a classe abstrata Swimable que possui apenas uma função abstrata swim(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