Menu
Coddy logo textTech

Podstawienie Liskov

Lekcja 24 z 28 w kursie Czysty kod — pisz lepszy kod w Pythonie w Coddy.

„Funkcje, które używają wskaźników lub referencji do klas bazowych, muszą móc korzystać z obiektów klas pochodnych bez wiedzy o tym.”

Ta zasada mówi, że klasa potomna musi być zastępowalna przez swoją klasę nadrzędną.

Na przykład:

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}')

Jak widać, zarówno SMS, jak i Email dziedziczą po Notification, ale jedna wysyła wiadomość na email, a druga na phone. Klasa SMS nie jest zastępowalna przez swoją klasę nadrzędną Notification!

challenge icon

Wyzwanie

Średni

Popraw podany kod, aby zastosować zasadę podstawienia Liskov -

- funkcja notify powinna przyjmować tylko argument message.

- klasy Email i SMS powinny mieć konstruktory, które będą inicjować odpowiednio email i phone.

- edytuj kod, aby wprowadzić zmiany

 

To tylko jedno z proponowanych rozwiązań wykorzystujących zasadę Liskov — istnieje więcej działających rozwiązań!

Spróbuj swoich sił

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)

Wszystkie lekcje w sekcji Czysty kod — pisz lepszy kod w Pythonie

Poćwicz samodzielnie: Kompilator Python online