Menu
Coddy logo textTech

Liskov substitution

Lección 24 de 28 del curso Clean Code - Write better code using Python de Coddy.

"Las funciones que utilizan punteros o referencias a clases base deben poder utilizar objetos de clases derivadas sin saberlo."

Este principio establece que una clase hija debe ser sustituible por su clase padre.

Por ejemplo,

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

Como puedes ver, tanto SMS como Email heredan de Notification, pero uno envía a email y el otro a phone; ¡la clase SMS no es sustituible por su padre Notification!

challenge icon

Desafío

Intermedio

Corrige el código dado para aplicar el principio de sustitución de Liskov -

- la función notify solo debe recibir message como argumento.

- Email y SMS deben tener cada uno un constructor que inicialice email y phone respectivamente.

- edita el código para aplicar los cambios

 

¡Esta es solo una solución sugerida para aplicar el principio de Liskov, hay más que funcionarán!

Pruébalo tú mismo

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)

Todas las lecciones de Clean Code - Write better code using Python