הפרדת ממשקים
שיעור 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!")כפי שאתם רואים, הממשק הזה אינו מתאים לבעלי חיים שאינם יכולים גם ללכת וגם לשחות!
אתגר
קלבואו נתקן את הדוגמה שלמעלה באמצעות מימוש המחלקות 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 אונליין