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")

ينتهك هذا الهيكل مبدأ الانفتاح-والإغلاق.

لماذا؟

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

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

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

from abc import ABC, abstractmethod

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

class TxtConvertorToJson(TxtConvertor):
	...

.
.
.

تدعم مكتبة abc الفئات الأساسية المجرّدة في Python، ويمكنك القراءة عن المزيد هنا

challenge icon

التحدي

متوسط

مهمتك هي تعديل المثال المُعطى لتطبيق مبدأ الانفتاح-والإغلاق ، وإضافة محوّل لدعم التحويل من 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

تدرّب بنفسك: مترجم Python عبر الإنترنت