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!
Desafio
MédioCorrija 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