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ş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):
	...

.
.
.

abc kütüphanesi Python için abstract base class'ları destekler; daha fazlasını buradan okuyabilirsiniz.

challenge icon

Görev

Orta

Gö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.

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

Kendi başına pratik yap: Online Python derleyicisi