Aperto/chiuso
Lezione 23 di 28 del corso Codice pulito - Scrivi codice migliore con Python di Coddy.
"Le entità software dovrebbero essere aperte all'estensione, ma chiuse alla modifica."
Il principio afferma che qualsiasi funzione, modulo o classe dovrebbe consentire di estenderne il comportamento senza modificare il codice stesso.
Supponiamo di avere la classe TxtConvertor che converte un file txt in json o xml,
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Questa struttura viola il principio Open-Closed.
Perché?
Per esempio, se vogliamo aggiungere il supporto per la conversione da un file txt a html, dovremo modificare la classe esistente (violando il principio di chiusura)
Quindi, cosa dovremmo fare?
In questo esempio, una soluzione potrebbe essere creare una classe astratta che contenga la funzione principale,
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.La libreria
abcsupporta le classi base astratte in Python. Puoi leggere di più qui
Sfida
MedioIl tuo compito è modificare l’esempio fornito per applicare il principio Open-Closed e aggiungere un convertitore per supportare la conversione da txt a html.
- crea la classe astratta
TxtConvertor - crea le classi
TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTML, che erediteranno daTxtConvertore implementeranno i convertitori (come nell’esempio precedente)
Provalo tu
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Tutte le lezioni di Codice pulito - Scrivi codice migliore con Python
Esercitati da solo: Compilatore Python online