כתיבת קוד — שיעור 8
OOP חלק ב׳ — Inheritance ו-Design Patterns
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T2 · בסיסי200 נק'~10 דק'debug
תיקון באג — ירושה בלי super()
תת-המחלקה Manager יורשת מ-Employee אך שוכחת לאתחל את מחלקת-הבסיס, ולכן name ו-salary לא קיימים ו-summary() קורס ב-AttributeError. מצא ותקן כך ש-Manager('Dana',100,5).summary() יחזיר 'Dana: 100, team 5'.
// הקוד השבור לתיקון
class Employee:
def __init__(self, name, salary):
self.name = name; self.salary = salary
class Manager(Employee):
def __init__(self, name, salary, team):
self.team = team # באג כאן
def summary(self):
return f"{self.name}: {self.salary}, team {self.team}"דוגמאות
Manager('Dana', 100, 5).summary() → 'Dana: 100, team 5'
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~25 דק'algorithmic
היררכיית Shape — פולימורפיזם
בנה מחלקה אבסטרקטית Shape עם מתודה אבסטרקטית area() (אי אפשר ליצור ממנה מופע ישירות). ממש שלוש תת-מחלקות: Rectangle(w,h), Circle(r) (שטח πr²), Triangle(b,h) (שטח b·h/2). לבסוף ממש פונקציה total_area(shapes) שמחזירה את סכום השטחים של רשימת צורות — פולימורפית, בלי לבדוק טיפוסים.
דוגמאות
Rectangle(3,4).area() → 12
Circle(2).area() → 12.566... (=4π)
total_area([Rectangle(2,2), Triangle(3,4)]) → 10.0
הפתרון נשמר מקומית אוטומטית.