Segregazione delle interfacce
Lezione 25 di 28 del corso Codice pulito - Scrivi codice migliore con Python di Coddy.
"Molte interfacce specifiche per i client sono meglio di un'unica interfaccia generica."
Un'interfaccia è una descrizione dei comportamenti che un oggetto può eseguire.
Il principio di segregazione delle interfacce afferma che un'interfaccia dovrebbe essere il più piccola possibile in termini di coesione. In altre parole, dovrebbe fare solo UNA cosa.
Vediamo un cattivo esempio e poi lo correggeremo,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passQuesta interfaccia ha più responsabilità!
E avremo un problema quando la implementeremo,
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!")Come vedi, questa interfaccia non è compatibile con gli animali che non possono camminare e nuotare!
Sfida
FacileCorreggiamo l'esempio precedente implementando le classi Walkable e Swimable>; ti vengono fornite le classi <code>Frog e Giraffe, che implementano le nuove classi
Attività:
- Crea la classe astratta
Walkable, che ha una sola funzione astrattawalk(self) - Crea la classe astratta
Swimable, che ha una sola funzione astrattaswim(self)
Non modificare il codice fornito!
Nota che ora ogni interfaccia ha una sola responsabilità e segue il principio
Provalo tu
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")
Tutte le lezioni di Codice pulito - Scrivi codice migliore con Python
Esercitati da solo: Compilatore Python online