Menu
Coddy logo textTech

Substitution de Liskov

Leçon 24 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.

"Les fonctions qui utilisent des pointeurs ou des références à des classes de base doivent pouvoir utiliser des objets de classes dérivées sans le savoir."

Ce principe stipule qu'une classe enfant doit pouvoir être substituée à sa classe parente.

Par exemple,

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

Comme vous pouvez le voir, SMS et Email héritent tous deux de Notification, mais l'un envoie à email et l'autre à phone, la classe SMS n'est pas substituable à sa parente Notification !

challenge icon

Défi

Moyen

Corrigez le code donné pour appliquer le principe de substitution de Liskov -

- la fonction notify ne doit recevoir que message comme argument.

- Email et SMS doivent chacun avoir un constructeur qui initialisera email et phone en conséquence.

- modifiez le code pour appliquer les changements

 

Ceci n'est qu'une solution suggérée pour appliquer le principe de Liskov, il en existe d'autres qui fonctionneront !

Essayez vous-même

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)

Toutes les leçons de Clean Code - Écrire un meilleur code avec Python