Menu
Coddy logo textTech

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!

challenge icon

Aufgabe

Mittel

Korrigiere 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)

Alle Lektionen in Clean Code - Schreibe besseren Code mit Python