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):
passTen 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ć!
Wyzwanie
ŁatwyNaprawmy 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