Substitusi Liskov
Pelajaran 24 dari 28 dalam kursus Clean Code: Menulis kode yang lebih baik dengan Python di Coddy.
"Fungsi yang menggunakan pointer atau referensi ke class dasar harus dapat menggunakan object dari class turunan tanpa mengetahuinya."
Prinsip ini menyatakan bahwa class anak harus dapat menggantikan class induknya.
Contohnya,
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}')Seperti yang kamu lihat, SMS dan Email sama-sama mewarisi Notification, tetapi yang satu mengirim ke email dan yang lain ke phone. Class SMS tidak dapat menggantikan induknya, yaitu Notification!
Tantangan
SedangPerbaiki kode yang diberikan untuk menerapkan prinsip substitusi Liskov.
- Fungsi notify seharusnya hanya menerima message sebagai argumen.
- Email dan SMS masing-masing harus memiliki constructor yang akan menginisialisasi email dan phone sesuai fungsinya.
- Edit kode untuk menerapkan perubahan tersebut.
Ini hanyalah satu solusi yang disarankan untuk menerapkan prinsip Liskov. Ada solusi lain yang juga bisa digunakan!
Coba sendiri
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)
Semua pelajaran di Clean Code: Menulis kode yang lebih baik dengan Python
Latihan sendiri: Compiler Python online