Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

فصل الواجهات

الدرس 25 من 28 في دورة Clean Code - كتابة كود أفضل باستخدام Python على Coddy.

"العديد من الواجهات المخصصة للعملاء أفضل من واجهة واحدة عامة الأغراض."

الواجهة (Interface) هي وصف للسلوكيات التي يمكن للكائن القيام بها.

ينص مبدأ فصل الواجهات (Interface segregation) على أن الواجهة يجب أن تكون صغيرة قدر الإمكان من حيث التماسك. بمعنى آخر، يجب أن تفعل شيئًا واحدًا فقط.

دعونا نرى مثالاً سيئاً وسنقوم بإصلاحه،

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!")

كما ترى، هذه الواجهة غير متوافقة مع الحيوانات التي لا تستطيع المشي والسباحة معاً!

challenge icon

التحدي

سهل

دعنا نصلح المثال السابق من خلال تنفيذ فئتي Walkable و Swimable، حيث يتم تزويدك بفئتي Frog و Giraffe اللتين تقومان بتنفيذ الفئات الجديدة

المهام:

  • قم بإنشاء فئة مجردة (abstract class) باسم Walkable تحتوي على دالة مجردة واحدة فقط هي walk(self)
  • قم بإنشاء فئة مجردة (abstract class) باسم Swimable تحتوي على دالة مجردة واحدة فقط هي swim(self)

لا تقم بتغيير الكود المعطى!

لاحظ أن كل واجهة (interface) الآن لديها مسؤولية واحدة فقط وتتبع المبدأ 

جرّب بنفسك

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