Açık kapalı
Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 23 / 28.
"Yazılım varlıkları genişletmeye açık, ancak değişikliğe kapalı olmalıdır."
Bu ilke, herhangi bir işlevin, modülün veya class'ın kodun kendisini değiştirmeden davranışının genişletilmesine izin vermesi gerektiğini belirtir.
txt file'ını json veya xml'e dönüştüren bir TxtConvertor class'ımız olduğunu varsayalım,
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Bu yapı, Açık-Kapalı ilkesini ihlal eder.
Neden?
Örneğin txt file'ından html'e dönüştürme desteği eklemek istersek mevcut class'ı değiştirmemiz gerekir (kapalı olma ilkesini ihlal eder).
Peki ne yapmalıyız?
Bu örnekte bir çözüm, ana işlevi barındıracak abstract class oluşturmaktır,
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.
abckütüphanesi Python için abstract base class'ları destekler; daha fazlasını buradan okuyabilirsiniz.
Görev
OrtaGöreviniz, verilen örneği Açık-Kapalı ilkesini uygulayacak şekilde değiştirmek ve txt'den html'ye dönüşümü desteklemek için bir dönüştürücü eklemektir.
TxtConvertorsoyut sınıfını oluşturunTxtConvertorsınıfından kalıtım alacak ve dönüştürücüleri uygulayacak (yukarıdaki örnekte olduğu gibi)TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTMLsınıflarını oluşturun
Kendin dene
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")Clean Code - Python ile daha iyi kod yazın bölümündeki tüm dersler
Kendi başına pratik yap: Online Python derleyicisi