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 Objekte abgeleiteter Klassen verwenden können, ohne davon zu wissen.“
Dieses Prinzip besagt, dass eine Unterklasse 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 du sehen kannst, erben sowohl SMS als auch Email von Notification, aber eine sendet an email und eine an phone; die SMS-class ist daher nicht durch ihre Elternklasse Notification ersetzbar!
Aufgabe
MittelKorrigiere den gegebenen Code, um das Liskovsche Substitutionsprinzip anzuwenden –
– Die notify-Funktion sollte nur message als Argument erhalten.
– Email und SMS sollten jeweils einen Konstruktor haben, der email beziehungsweise phone initialisiert.
– Bearbeite den Code, um die Änderungen anzuwenden.
Dies ist nur eine vorgeschlagene Lösung zur Anwendung des Liskov-Prinzips; es gibt weitere, die ebenfalls 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)
Alle Lektionen in Clean Code - Schreibe besseren Code mit Python
Übe selbstständig: Online-Python-Compiler