Liskov ikamesi
Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 24 / 28.
"Temel sınıflara yönelik işaretçiler veya referanslar kullanan işlevler, türetilmiş sınıfların nesnelerini bilmeden kullanabilmelidir."
Bu ilke, bir alt sınıfın üst sınıfının yerine geçebilir olması gerektiğini belirtir.
Örneğin,
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}')Gördüğünüz gibi hem SMS hem de Email, Notification sınıfından miras alıyor ancak biri email adresine, diğeri ise phone numarasına gönderim yapıyor; SMS sınıfı, üst sınıfı olan Notification'ın yerine geçebilir değildir!
Görev
OrtaLiskov yer değiştirme prensibini uygulamak için verilen kodu düzeltin -
- notify fonksiyonu argüman olarak sadece message almalıdır.
- Email ve SMS sınıflarının her biri, email ve phone değerlerini uygun şekilde başlatan birer constructor'a sahip olmalıdır.
- Değişiklikleri uygulamak için kodu düzenleyin
Bu, Liskov prensibini uygulamak için önerilen çözümlerden yalnızca biridir; işe yarayacak daha fazla çözüm mevcuttur!
Kendin dene
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)