Pemisahan interface
Pelajaran 25 dari 28 dalam kursus Clean Code: Menulis kode yang lebih baik dengan Python di Coddy.
"Lebih baik memiliki banyak antarmuka yang spesifik untuk klien daripada satu antarmuka serbaguna."
Antarmuka adalah deskripsi perilaku yang dapat dilakukan oleh sebuah object.
Prinsip segregasi antarmuka menyatakan bahwa antarmuka sebaiknya sekecil mungkin dari segi kohesi. Dengan kata lain, antarmuka sebaiknya hanya melakukan SATU hal.
Mari kita lihat contoh yang buruk, lalu kita perbaiki.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passAntarmuka ini memiliki banyak tanggung jawab!
Kita akan mengalami masalah saat mengimplementasikannya.
class Frog(Animal):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Animal):
def walk(self):
print("Walking")
def swim(self):
raise Exception("Girrafe cannot swim!")Seperti yang kamu lihat, antarmuka ini tidak cocok untuk hewan yang tidak bisa berjalan dan berenang!
Tantangan
MudahMari perbaiki contoh di atas dengan mengimplementasikan class Walkable dan Swimable. Kamu diberi class Frog dan Giraffe yang mengimplementasikan class baru tersebut.
Tugas:
- Buat class abstrak
Walkableyang hanya memiliki satu fungsi abstrak, yaituwalk(self) - Buat class abstrak
Swimableyang hanya memiliki satu fungsi abstrak, yaituswim(self)
Jangan ubah kode yang diberikan!
Perhatikan bahwa sekarang setiap interface hanya memiliki satu tanggung jawab dan mengikuti prinsip
Coba sendiri
from abc import ABC, abstractmethod
# Enter you code here
class Frog(Walkable, Swimable):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Walkable):
def walk(self):
print("Walking")
if __name__ == "__main__":
animal_type = input()
if animal_type == "frog":
animal = Frog()
animal.walk()
animal.swim()
elif animal_type == "giraffe":
animal = Giraffe()
animal.walk()
print("not Swimming")
Semua pelajaran di Clean Code: Menulis kode yang lebih baik dengan Python
Latihan sendiri: Compiler Python online