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

فصل الواجهات

الدرس 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!")

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

challenge icon

التحدي

سهل

لنُصلح المثال أعلاه من خلال تنفيذ فئتَي 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 عبر الإنترنت