Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المبدأ المفتوح المغلق

الدرس 23 من 28 في دورة Clean Code - كتابة كود أفضل باستخدام Python على Coddy.

"يجب أن تكون الكيانات البرمجية مفتوحة للتوسيع، ولكن مغلقة للتعديل."

ينص المبدأ على أن أي دالة أو وحدة أو فئة يجب أن تسمح بتوسيع سلوكها دون تعديل الكود نفسه. 

لنفترض أن لدينا فئة TxtConvertor تقوم بتحويل ملف txt إلى json أو 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")

هذا الهيكل ينتهك مبدأ المفتوح-المغلق (Open-Closed principle).

لماذا؟

على سبيل المثال، إذا أردنا إضافة دعم للتحويل من ملف txt إلى html، فسيتعين علينا تعديل الفئة الحالية (مما ينتهك مبدأ الإغلاق)

إذًا ماذا يجب أن نفعل؟

في هذا المثال، سيكون أحد الحلول هو إنشاء فئة مجردة (abstract class) ستحتوي على الدالة الرئيسية،

from abc import ABC, abstractmethod

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

class TxtConvertorToJson(TxtConvertor):
	...

.
.
.

تدعم مكتبة abc الفئات الأساسية المجردة (abstract base classes) للغة بايثون، يمكنك قراءة المزيد هنا

challenge icon

التحدي

متوسط

مهمتك هي تعديل المثال المعطى لتطبيق مبدأ المفتوح-المغلق (Open-Closed principle)، وإضافة محول لدعم التحويل من txt إلى html.

  1. قم بإنشاء فئة مجردة TxtConvertor
  2. قم بإنشاء الفئات TxtConvertorToJson، و TxtConvertorToXML، و TxtConvertorToHTML التي سترث من TxtConvertor وتقوم بتنفيذ المحولات (كما في المثال أعلاه)

جرّب بنفسك

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