Menu
Coddy logo textTech

הפרדת ממשקים

שיעור 25 מתוך 28 בקורס קוד נקי – כתיבת קוד טוב יותר באמצעות Python של Coddy.

"ממשקים רבים המותאמים ללקוחות ספציפיים עדיפים על ממשק אחד למטרות כלליות."

ממשק הוא תיאור של התנהגויות שאובייקט יכול לבצע.

עקרון הפרדת הממשקים קובע שממשק צריך להיות קטן ככל האפשר מבחינת לכידות. במילים אחרות, עליו לעשות רק דבר אחד.

בואו נראה דוגמה גרועה ונתקן אותה,

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

כל השיעורים ביחידה קוד נקי – כתיבת קוד טוב יותר באמצעות Python

תרגלו בעצמכם: קומפיילר Python אונליין