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 de cliente son mejores que una 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 es una interfaz con múltiples responsabilidades!

Y tendremos problemas al implementar esto,

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 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 tenga solo una función abstracta walk(self)
  • Crea la clase abstracta Swimable que tenga solo una función abstracta swim(self)

¡No cambies el código proporcionado!

Observa que ahora cada interfaz tiene una sola 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