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 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!

challenge icon

Aufgabe

Mittel

Korrigiere 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