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

استبدال ليسكوف

الدرس 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!

challenge icon

التحدي

متوسط

أصلح الكود المُعطى لتطبيق مبدأ استبدال ليسكوف -

- يجب أن تحصل الدالة 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 عبر الإنترنت