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."

Esse 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 uma envia para email e a outra 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 da substituição de Liskov -

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

- Email e SMS devem ter cada um um construtor que inicializará email e phone, respectivamente.

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

 

Esta é apenas uma solução sugerida para aplicar o princípio de Liskov; há outras que também 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

Pratique por conta própria: Compilador de Python online