Menu
Coddy logo textTech

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!

challenge icon

Görev

Orta

Verilen 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