Liskov Substitution
Lektion 24 von 28 im Kurs Clean Code - Schreibe besseren Code mit Python von Coddy.
"Funktionen, die Zeiger oder Referenzen auf Basisklassen verwenden, müssen in der Lage sein, Objekte abgeleiteter Klassen zu verwenden, ohne es zu wissen."
Dieses Prinzip besagt, dass eine Kindklasse durch ihre Elternklasse ersetzbar sein muss.
Zum Beispiel,
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}')Wie Sie sehen können, erben sowohl SMS als auch Email von Notification, aber eine sendet an email und eine an phone. Die SMS-Klasse ist nicht durch ihre Elternklasse Notification ersetzbar!
Aufgabe
MittelKorrigiere den gegebenen Code, um das Liskovsche Substitutionsprinzip anzuwenden -
- Die Funktion notify sollte nur message als Argument erhalten.
- Email und SMS sollten jeweils einen Konstruktor haben, der email bzw. phone entsprechend initialisiert.
- Bearbeite den Code, um die Änderungen anzuwenden
Dies ist nur eine vorgeschlagene Lösung zur Anwendung des Liskov-Prinzips, es gibt noch weitere, die funktionieren!
Probier es selbst
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)