استبدال ليسكوف
الدرس 24 من 28 في دورة Clean Code - كتابة كود أفضل باستخدام Python على Coddy.
"يجب أن تتمكن الدوال التي تستخدم مؤشرات أو مراجع إلى الفئات الأساسية من استخدام كائنات الفئات المشتقة دون معرفة ذلك."
ينص هذا المبدأ على أن الفئة الابنة يجب أن تكون قابلة للاستبدال من الفئة الأم.
على سبيل المثال،
class Notification(ABC):
@abstractmethod
def notify(self, message, email):
pass
class Email(Notification):
def notify(self, message, email):
print(f'Send {message} to {email}')
class SMS(Notification):
def notify(self, message, phone):
print(f'Send {message} to {phone}')كما ترى، يرث كلٌّ من SMS وEmail من Notification، لكن أحدهما يرسل إلى email والآخر إلى phone، لذلك فإن الفئة SMS ليست قابلة للاستبدال من فئتها الأم Notification!
التحدي
متوسطأصلح الكود المُعطى لتطبيق مبدأ استبدال ليسكوف -
- يجب أن تحصل الدالة notify على message فقط كوسيط.
- يجب أن يمتلك كل من Email وSMS مُنشئًا يهيّئ email وphone وفقًا لذلك.
- حرّر الكود لتطبيق التغييرات
هذا مجرد حل مقترح واحد لتطبيق مبدأ ليسكوف، وهناك حلول أخرى ستنجح أيضًا!
جرّب بنفسك
from abc import ABC, abstractmethod
class Notification(ABC):
@abstractmethod
def notify(self, message, email):
pass
class Email(Notification):
def notify(self, message, email):
print(f'Send {message} to {email}')
class SMS(Notification):
def notify(self, message, phone):
print(f'Send {message} to {phone}')
if __name__ == '__main__':
email = input()
phone = input()
message = input()
notification1 = Email()
notification2 = SMS()
notification1.notify(message, email)
notification2.notify(message, phone)
جميع دروس Clean Code - كتابة كود أفضل باستخدام Python
تدرّب بنفسك: مترجم Python عبر الإنترنت