Menu
Coddy logo textTech

Segregacja interfejsów

Lekcja 25 z 28 w kursie Czysty kod — pisz lepszy kod w Pythonie w Coddy.

„Wiele interfejsów dostosowanych do konkretnych klientów jest lepszych niż jeden interfejs ogólnego przeznaczenia”.

Interfejs to opis zachowań, które może wykonywać obiekt.

Zasada segregacji interfejsów mówi, że interfejs powinien być jak najmniejszy pod względem spójności. Innymi słowy, powinien robić tylko JEDNĄ rzecz.

Zobaczmy zły przykład i naprawmy go,

from abc import ABC, abstractmethod


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

	@abstractmethod
	def swim(self):
		pass

Ten interfejs ma wiele obowiązków!

I będziemy mieć problem z jego implementacją,

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

Jak widzisz, ten interfejs nie jest zgodny ze zwierzętami, które nie potrafią chodzić i pływać!

challenge icon

Wyzwanie

Łatwy

Naprawmy powyższy przykład, implementując klasy Walkable i Swimable. Otrzymujesz klasy Frog i Giraffe, które implementują nowe klasy.

Zadania:

  • Utwórz klasę abstrakcyjną Walkable, która ma tylko jedną funkcję abstrakcyjną walk(self)
  • Utwórz klasę abstrakcyjną Swimable, która ma tylko jedną funkcję abstrakcyjną swim(self)

Nie zmieniaj podanego kodu!

Zauważ, że teraz każdy interfejs ma tylko jedną odpowiedzialność i jest zgodny z zasadą 

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Czysty kod — pisz lepszy kod w Pythonie

Poćwicz samodzielnie: Kompilator Python online