Menu
CoddyTech

Terbuka-tertutup

Pelajaran 23 dari 28 dalam kursus Clean Code: Menulis kode yang lebih baik dengan Python di Coddy.

"Entitas perangkat lunak seharusnya terbuka untuk ekstensi, tetapi tertutup untuk modifikasi."

Prinsip ini menyatakan bahwa fungsi, module, atau class apa pun harus memungkinkan perilakunya diperluas tanpa memodifikasi kodenya.  

Misalnya, kita memiliki class TxtConvertor yang mengonversi file txt menjadi json atau 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")

Struktur ini melanggar prinsip Open-Closed.

Mengapa?

Misalnya, jika kita ingin menambahkan dukungan untuk konversi dari file txt ke html, kita harus memodifikasi class yang sudah ada (melanggar prinsip tertutup).

Jadi, apa yang harus kita lakukan?

Dalam contoh ini, salah satu solusinya adalah membuat class abstrak yang akan memuat fungsi utama,

from abc import ABC, abstractmethod

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

class TxtConvertorToJson(TxtConvertor):
	...

.
.
.

library abc mendukung class dasar abstrak untuk python. Kamu bisa membaca lebih lanjut di sini

challenge icon

Tantangan

Sedang

Tugasmu adalah memodifikasi contoh yang diberikan agar menerapkan prinsip Open-Closed , dan menambahkan converter untuk mendukung txt ke html.

  1. buat abstract class TxtConvertor
  2. buat class TxtConvertorToJson, TxtConvertorToXML, TxtConvertorToHTML yang akan mewarisi TxtConvertor dan mengimplementasikan converter (seperti pada contoh di atas)

Coba sendiri

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

Semua pelajaran di Clean Code: Menulis kode yang lebih baik dengan Python

Latihan sendiri: Compiler Python online