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ç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!

challenge icon

Görev

Orta

Liskov 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)

Clean Code - Python ile daha iyi kod yazın bölümündeki tüm dersler