Menu
Coddy logo textTech

החלפת ליסקוב

שיעור 24 מתוך 28 בקורס קוד נקי – כתיבת קוד טוב יותר באמצעות 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)

כל השיעורים ביחידה קוד נקי – כתיבת קוד טוב יותר באמצעות Python

תרגלו בעצמכם: קומפיילר Python אונליין