Menu
Coddy logo textTech

Otwarte-zamknięte

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

„Elementy oprogramowania powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje”.

Zasada ta mówi, że każda funkcja, moduł lub klasa powinny umożliwiać rozszerzanie swojego działania bez modyfikowania samego kodu.  

Załóżmy, że mamy klasę TxtConvertor, która konwertuje plik txt do formatu json lub 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")

Taka struktura narusza zasadę otwarte-zamknięte.

Dlaczego?

Na przykład, jeśli chcemy dodać obsługę konwersji pliku txt do formatu html, będziemy musieli zmodyfikować istniejącą klasę (narusza to zasadę zamknięcia).

Co więc powinniśmy zrobić?

W tym przykładzie jednym z rozwiązań byłoby utworzenie klasy abstrakcyjnej, która będzie zawierać główną funkcję,

from abc import ABC, abstractmethod

class TxtConvertor(ABC):
	@abstractmethod
	def convert(self, file):
		pass

class TxtConvertorToJson(TxtConvertor):
	...

.
.
.

Biblioteka abc obsługuje abstrakcyjne klasy bazowe w Pythonie. Więcej informacji znajdziesz tutaj.

challenge icon

Wyzwanie

Średni

Twoim zadaniem jest zmodyfikować podany przykład, aby zastosować zasadę otwarte-zamknięte i dodać konwerter obsługujący konwersję plików txt do html.

  1. utwórz klasę abstrakcyjną TxtConvertor
  2. utwórz klasy TxtConvertorToJson, TxtConvertorToXML, TxtConvertorToHTML, które będą dziedziczyć po TxtConvertor i implementować konwertery (jak w powyższym przykładzie)

Spróbuj swoich sił

class TxtConvertor:
	def convert_to_json(self, file):
		print("converts file to json")
	
	def convert_to_xml(self, file):
		print("converts file to xml")

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

Poćwicz samodzielnie: Kompilator Python online