Menu
CoddyTech

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!

challenge icon

Tantangan

Sedang

Perbaiki 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