Menu
Coddy logo textTech

Açık kapalı

Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 23 / 28.

"Yazılım varlıkları genişletilmeye açık, ancak değişikliğe kapalı olmalıdır."

Bu ilke, herhangi bir fonksiyonun, modülün veya sınıfın, kodun kendisini değiştirmeden davranışının genişletilmesine izin vermesi gerektiğini belirtir.  

Diyelim ki txt dosyasını json veya xml'e dönüştüren bir TxtConvertor sınıfımız var,

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ı (Open-Closed) ilkesini ihlal eder.

Neden?

Örneğin, txt dosyasından html'e dönüştürme desteği eklemek istersek, mevcut sınıfı değiştirmemiz gerekecektir (kapalı ilkesini ihlal eder)

Peki ne yapmalıyız?

Bu örnekte çözümlerden biri, ana fonksiyonu tutacak soyut bir sınıf oluşturmak olacaktır,

from abc import ABC, abstractmethod

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

class TxtConvertorToJson(TxtConvertor):
	...

.
.
.

abc kütüphanesi python için soyut temel sınıfları destekler, daha fazlasını buradan okuyabilirsiniz

challenge icon

Görev

Orta

Göreviniz, Açık-Kapalı prensibini (Open-Closed principle) uygulamak için verilen örneği değiştirmek ve txt'den html'ye dönüştürmeyi desteklemek için bir dönüştürücü eklemektir.

  1. TxtConvertor soyut sınıfını oluşturun
  2. TxtConvertor sınıfından miras alacak ve dönüştürücüleri (yukarıdaki örnekte olduğu gibi) uygulayacak olan TxtConvertorToJson, TxtConvertorToXML, TxtConvertorToHTML sı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