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

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

SOLID: المسؤولية والانفتاح

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

S — المسؤولية الواحدة (SRP)

لكل صنف سبب واحد فقط للتغيير (مسؤولية واحدة).

# سيّئ: الصنف يفعل كل شيء
class User:
    def save(self): ...        # قاعدة بيانات
    def send_email(self): ...  # بريد
    def to_json(self): ...     # تنسيق

# أفضل: افصل المسؤوليات
class User: ...
class UserRepository:
    def save(self, user): ...
class EmailService:
    def send(self, user): ...

O — الانفتاح/الانغلاق (OCP)

الكود مفتوح للتوسعة، مغلق للتعديل: أضِف سلوكًا جديدًا دون تغيير الكود القائم.

# سيّئ: تعدّل الدالة كلّما أضفت شكلًا
def area(shape):
    if shape.type == "circle": ...
    elif shape.type == "square": ...

# أفضل: كل شكل يعرف مساحته (توسّع بالوراثة)
class Shape(ABC):
    @abstractmethod
    def area(self): ...

class Circle(Shape):
    def area(self): ...
class Square(Shape):
    def area(self): ...
# إضافة Triangle لا تتطلّب تعديل أي كود قائم

💡 OCP يتحقّق غالبًا بالتجريد (واجهات/أصناف مجرّدة) وتعدّد الأشكال.

🎯 التالي: مبادئ L و I و D.

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