Menu
Coddy logo textTech

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!

challenge icon

Desafío

Fácil

Vamos 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 abstracta walk(self)
  • Crea la clase abstracta Swimable, que tiene una única función abstracta swim(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