Menu
Coddy logo textTech

Substituição de Liskov

Lição 24 de 28 do curso Clean Code - Escreva códigos melhores com Python da Coddy.

"Funções que usam ponteiros ou referências para classes base devem ser capazes de usar objetos de classes derivadas sem saber disso."

Este princípio afirma que uma classe filha deve ser substituível por sua classe pai.

Por exemplo,

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 você pode ver, tanto SMS quanto Email herdam de Notification, mas um está enviando para email e o outro para phone, a classe SMS não é substituível por sua classe pai Notification!

challenge icon

Desafio

Médio

Corrija o código fornecido para aplicar o princípio de substituição de Liskov -

- a função notify deve receber apenas message como argumento.

- Email e SMS devem ter, cada um, um construtor que iniciará email e phone adequadamente.

- edite o código para aplicar as alterações

 

Esta é apenas uma solução sugerida para aplicar o princípio de Liskov, existem outras que funcionarão!

Experimente você mesmo

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 as lições de Clean Code - Escreva códigos melhores com Python