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.

« De nombreuses interfaces propres à un client sont meilleures qu’une seule interface polyvalente. »

Une interface est une description des comportements qu’un objet peut avoir.

Le principe de séparation des interfaces affirme 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 corrigeons-le,

from abc import ABC, abstractmethod


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

	@abstractmethod
	def swim(self):
		pass

Il s’agit d’une interface avec plusieurs responsabilités !

Et nous aurons un problème lors de son implémentation,

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 walk et swim !

challenge icon

Défi

Facile

Corrigeons l’exemple ci-dessus en implémentant les classes Walkable et Swimable ; les classes Frog et Giraffe, qui implémentent les nouvelles classes, vous sont fournies.

Tâches :

  • Créez la classe abstraite Walkable, qui ne possède qu’une seule fonction abstraite walk(self).
  • Créez la classe abstraite Swimable, qui ne possède qu’une seule fonction abstraite swim(self).

Ne modifiez pas le code fourni !

Remarquez que chaque interface n’a désormais 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

Entraînez-vous par vous-même : Compilateur Python en ligne