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
abcmendukung class dasar abstrak untuk python. Kamu bisa membaca lebih lanjut di sini
Tantangan
SedangTugasmu adalah memodifikasi contoh yang diberikan agar menerapkan prinsip Open-Closed , dan menambahkan converter untuk mendukung txt ke html.
- buat abstract class
TxtConvertor - buat class
TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTMLyang akan mewarisiTxtConvertordan 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