GammaCyber

כתיבת קוד — שיעור 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'
פתרון-ייחוס תיקון באג — ירושה בלי super() ›
class Employee: def __init__(self, name, salary): self.name = name; self.salary = salary class Manager(Employee): def __init__(self, name, salary, team): super().__init__(name, salary) # התיקון: אתחול מחלקת-הבסיס self.team = team def summary(self): return f"{self.name}: {self.salary}, team {self.team}"
הפתרון נשמר מקומית אוטומטית.
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
פתרון-ייחוס היררכיית Shape — פולימורפיזם ›
from abc import ABC, abstractmethod import math class Shape(ABC): @abstractmethod def area(self): ... class Rectangle(Shape): def __init__(self, w, h): self.w = w; self.h = h def area(self): return self.w * self.h class Circle(Shape): def __init__(self, r): self.r = r def area(self): return math.pi * self.r * self.r class Triangle(Shape): def __init__(self, b, h): self.b = b; self.h = h def area(self): return self.b * self.h / 2 def total_area(shapes): return sum(s.area() for s in shapes) # פולימורפיזם
הפתרון נשמר מקומית אוטומטית.