تخطَّ إلى المحتوى

🧩 شرح البرمجة كائنية التوجّه

SOLID: L و I و D

الدرس 21 من 25· ⏱ 1 دقائق قراءة

L — استبدال ليسكوف (LSP)

يجب أن يحلّ الابن محلّ الأب دون كسر السلوك المتوقّع.

# انتهاك: Penguin يرث Bird لكنه لا يطير
class Bird:
    def fly(self): ...
class Penguin(Bird):
    def fly(self): raise Exception("لا أطير!")  # يكسر التوقّع

# الحلّ: صمّم التسلسل بحيث لا يَعِد الأب بما لا يحقّقه الابن

I — فصل الواجهات (ISP)

لا تجبر الصنف على تنفيذ طرق لا يحتاجها — قسّم الواجهات الكبيرة لصغيرة.

# سيّئ: واجهة ضخمة
class Machine(ABC):
    def print(self): ...
    def scan(self): ...
    def fax(self): ...      # الطابعة البسيطة لا تحتاجه

# أفضل: واجهات صغيرة مركّزة
class Printer(ABC):
    def print(self): ...
class Scanner(ABC):
    def scan(self): ...

D — عكس الاعتمادية (DIP)

اعتمد على التجريد لا على التنفيذ الملموس.

# سيّئ: مرتبط بتنفيذ محدّد
class Service:
    def __init__(self):
        self.db = MySQLDatabase()    # اقتران قويّ

# أفضل: احقن التجريد (مرن وقابل للاختبار)
class Service:
    def __init__(self, db: Database):   # أي قاعدة تحقّق الواجهة
        self.db = db

💡 DIP أساس حقن الاعتماديات (Dependency Injection) والاختبار بالـ mocks.

🎯 التالي: أنماط التصميم.

هل كان هذا الدرس مفيدًا؟