Arayüz ayrımı
Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 25 / 28.
"Birçok istemciye özel arayüz, tek bir genel amaçlı arayüzden daha iyidir."
Arayüz (interface), bir nesnenin yapabileceği davranışların bir tanımıdır.
Arayüz ayrımı (interface segregation) prensibi, bir arayüzün uyumluluk (cohesion) açısından mümkün olduğunca küçük olması gerektiğini belirtir. Başka bir deyişle, sadece TEK bir iş yapmalıdır.
Kötü bir örneğe bakalım ve onu düzeltelim,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passBu, birden fazla sorumluluğu olan bir arayüzdür!
Ve bunu uygularken sorun yaşayacağız,
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!")Gördüğünüz gibi bu arayüz, hem yürüyüp hem yüzemeyen hayvanlarla uyumlu değildir!
Görev
KolayWalkable ve Swimable sınıflarını uygulayarak yukarıdaki örneği düzeltelim; size bu yeni sınıfları uygulayan Frog ve Giraffe sınıfları verilmiştir
Görevler:
- Yalnızca bir tane soyut fonksiyonu
walk(self)olanWalkablesoyut sınıfını oluşturun - Yalnızca bir tane soyut fonksiyonu
swim(self)olanSwimablesoyut sınıfını oluşturun
Verilen kodu değiştirmeyin!
Artık her arayüzün yalnızca bir sorumluluğu olduğuna ve prensibe uygun olduğuna dikkat edin
Kendin dene
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")