فصل الواجهات
الدرس 25 من 28 في دورة Clean Code - كتابة كود أفضل باستخدام Python على Coddy.
"العديد من الواجهات الخاصة بالعملاء أفضل من واجهة واحدة متعددة الأغراض."
الواجهة هي وصف للسلوكيات التي يمكن للكائن تنفيذها.
ينص مبدأ فصل الواجهات على أن الواجهة يجب أن تكون صغيرة قدر الإمكان من حيث التماسك. بعبارة أخرى، يجب أن تنفّذ شيئًا واحدًا ONE فقط.
لنرَ مثالًا سيئًا وسنقوم بإصلاحه،
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passهذه واجهة ذات مسؤوليات متعددة!
وسنواجه مشكلة عند تنفيذ ذلك،
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!")كما ترى، هذه الواجهة غير متوافقة مع الحيوانات التي لا تستطيع المشي والسباحة!
التحدي
سهللنُصلح المثال أعلاه من خلال تنفيذ فئتَي Walkable وSwimable، إذ مُنحت لك فئتا Frog وGiraffe اللتان تنفذان الفئتَين الجديدتَين
المهام:
- أنشئ فئة مجردة
Walkableتحتوي على دالة مجردة واحدة فقط، وهيwalk(self) - أنشئ فئة مجردة
Swimableتحتوي على دالة مجردة واحدة فقط، وهيswim(self)
لا تغيّر الكود المُعطى!
لاحظ أنه الآن لكل واجهة مسؤولية واحدة فقط، وهي تتبع المبدأ
جرّب بنفسك
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")
جميع دروس Clean Code - كتابة كود أفضل باستخدام Python
تدرّب بنفسك: مترجم Python عبر الإنترنت