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 poder sustituirse 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 una envía a email y la otra a phone; la clase SMS no puede sustituirse por su clase padre Notification.

challenge icon

Desafío

Intermedio

Corrige el código proporcionado para aplicar el principio de sustitución de Liskov:

- La función notify solo debería recibir message como argumento.

- Email y SMS deberían 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

Practica por tu cuenta: Compilador de Python online