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çileri veya referansları kullanan işlevler, bunu bilmeden türetilmiş sınıfların nesnelerini kullanabilmelidir."
Bu ilke, bir alt sınıfın kendi üst sınıfının yerine kullanılabilmesi 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ır; ancak biri email adresine, diğeri ise phone numarasına gönderim yapar. SMS sınıfı, kendi üst sınıfı olan Notification yerine kullanılamaz!
Görev
OrtaVerilen kodu Liskov yerine geçme ilkesini uygulayacak şekilde düzeltin -
- notify işlevi yalnızca message bağımsız değişkenini almalıdır.
- Email ve SMS sınıflarının her birinde, sırasıyla email ve phone değerlerini başlatacak bir yapıcı bulunmalıdır.
- değişiklikleri uygulamak için kodu düzenleyin
Bu, Liskov ilkesini uygulamak için önerilen çözümlerden yalnızca biridir; işe yarayacak başka çözümler de vardır!
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)
Clean Code - Python ile daha iyi kod yazın bölümündeki tüm dersler
Kendi başına pratik yap: Online Python derleyicisi