Aberto/fechado
Lição 23 de 28 do curso Clean Code - Escreva códigos melhores com Python da Coddy.
"As entidades de software devem estar abertas para extensão, mas fechadas para modificação."
O princípio afirma que qualquer função, módulo ou classe deve permitir a extensão de seu comportamento sem modificar o próprio código.
Digamos que temos a classe TxtConvertor, que converte um arquivo txt para json ou 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")Essa estrutura viola o princípio Aberto-Fechado.
Por quê?
Por exemplo, se quisermos adicionar suporte à conversão de um arquivo txt para html, teremos que modificar a classe existente (viola o princípio fechado)
Então, o que devemos fazer?
Neste exemplo, uma solução seria criar uma classe abstrata que conterá a função principal,
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.A biblioteca
abcoferece suporte a classes base abstratas para Python; você pode ler mais aqui
Desafio
MédioSua tarefa é modificar o exemplo fornecido para aplicar o princípio Aberto-Fechado e adicionar um conversor para oferecer suporte à conversão de txt para html.
- crie a classe abstrata
TxtConvertor - crie as classes
TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTML, que herdarão deTxtConvertore implementarão os conversores (como no exemplo acima)
Experimente você mesmo
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Todas as lições de Clean Code - Escreva códigos melhores com Python
Pratique por conta própria: Compilador de Python online