GammaCyber

כתיבת קוד — שיעור 7

OOP חלק א׳ — Classes ו-Encapsulation

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T2 · בסיסי250 נק'~20 דק'algorithmic
Vector2D עם Magic Methods
ממש מחלקה Vector2D המייצגת וקטור דו-ממדי עם x,y. עליה לתמוך ב: חיבור וקטורים באמצעות + (__add__), השוואת שוויון עם == (__eq__), ייצוג טקסטואלי repr בפורמט המדויק 'Vector2D(x, y)' (__repr__), ומתודה magnitude() המחזירה את גודל הווקטור (שורש סכום הריבועים).
דוגמאות
Vector2D(1,2) + Vector2D(3,4) → Vector2D(4, 6)
repr(Vector2D(4, 6)) → 'Vector2D(4, 6)'
Vector2D(3,4).magnitude() → 5.0
פתרון-ייחוס Vector2D עם Magic Methods ›
class Vector2D: def __init__(self, x, y): self.x = x; self.y = y def __add__(self, o): return Vector2D(self.x + o.x, self.y + o.y) def __eq__(self, o): return isinstance(o, Vector2D) and self.x == o.x and self.y == o.y def __repr__(self): return f"Vector2D({self.x}, {self.y})" def magnitude(self): return (self.x**2 + self.y**2) ** 0.5
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~25 דק'algorithmic
BankAccount — אינקפסולציה וחריגות
ממש מחלקה BankAccount עם יתרה מוסתרת (name mangling). דרישות: __init__(balance=0) — יתרה שלילית זורקת ValueError. deposit(amt) ו-withdraw(amt) — סכום ≤ 0 זורק ValueError; משיכה מעבר ליתרה זורקת ValueError. balance חשוף כ-property לקריאה בלבד (אי אפשר לבצע account.balance = X מבחוץ).
דוגמאות
a=BankAccount(100); a.deposit(50); a.balance → 150
a.withdraw(30); a.balance → 120
a.withdraw(1000) → ValueError
פתרון-ייחוס BankAccount — אינקפסולציה וחריגות ›
class BankAccount: def __init__(self, balance=0): if balance < 0: raise ValueError("balance must be >= 0") self.__balance = balance # שם-משתנה מוסתר (name mangling) @property def balance(self): # קריאה בלבד — אין setter return self.__balance def deposit(self, amt): if amt <= 0: raise ValueError("amt must be > 0") self.__balance += amt def withdraw(self, amt): if amt <= 0: raise ValueError("amt must be > 0") if amt > self.__balance: raise ValueError("insufficient funds") self.__balance -= amt
הפתרון נשמר מקומית אוטומטית.