Menu
Coddy logo textTech

Ségrégation des interfaces

Leçon 25 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.

"Plusieurs interfaces spécifiques aux clients valent mieux qu'une seule interface à usage général."

Une interface est une description des comportements qu'un objet peut adopter.

Le principe de ségrégation des interfaces stipule qu'une interface doit être aussi petite que possible en termes de cohésion. En d'autres termes, elle ne doit faire qu'UNE SEULE chose.

Voyons un mauvais exemple et nous allons le corriger,

from abc import ABC, abstractmethod


class Animal(ABC):
	@abstractmethod
	def walk(self):
		pass

	@abstractmethod
	def swim(self):
		pass

C'est une interface avec plusieurs responsabilités !

Et nous aurons un problème lors de l'implémentation de ceci,

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!")

Comme vous pouvez le voir, cette interface n'est pas compatible avec les animaux qui ne peuvent pas à la fois marcher et nager !

challenge icon

Défi

Facile

Réparons l'exemple ci-dessus en implémentant les classes Walkable et Swimable, on vous donne les classes Frog et Giraffe qui implémentent les nouvelles classes

Tâches :

  • Créez la classe abstraite Walkable qui n'a qu'une seule fonction abstraite walk(self)
  • Créez la classe abstraite Swimable qui n'a qu'une seule fonction abstraite swim(self)

Ne modifiez pas le code donné !

Remarquez que maintenant chaque interface n'a qu'une seule responsabilité et respecte le principe 

Essayez vous-même

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")
			

Toutes les leçons de Clean Code - Écrire un meilleur code avec Python