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 vers 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 class 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 constater, SMS et Email héritent tous deux de Notification, mais l’un envoie vers email et l’autre vers phone ; la class SMS ne peut donc pas être substituée à sa class parente Notification !

challenge icon

Défi

Moyen

Corrigez le code fourni afin d’appliquer le principe de substitution de Liskov -

- La fonction notify doit uniquement recevoir message comme argument.

- Email et SMS doivent chacun avoir un constructeur qui initialisera respectivement email et phone.

- modifiez le code pour appliquer ces changements

 

Il ne s’agit que d’une solution possible pour appliquer le principe de Liskov ; d’autres solutions fonctionneront également !

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

Entraînez-vous par vous-même : Compilateur Python en ligne