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