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

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

challenge icon

Desafio

Fácil

Vamos 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 abstrata walk(self)
  • Crie a classe abstrata Swimable, que tem 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

Pratique por conta própria: Compilador de Python online