# מערך שיעור: Properties ו-Access Modifiers📋 מערך מרצה

משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יבינו למה שדות `public` חשופים מסוכנים, וישתמשו ב-Properties ו-Access Modifiers להגנה על מצב פנימי.

בסוף השיעור הסטודנטים צריכים: לכתוב Property עם ולידציה ב-`set`, להשתמש ב-`private set` להגבלת שינוי חיצוני, ולהסביר את ההבדל בין `private` ל-`public`.

דגש קריטי: פתחו עם דוגמה מוחשית של הנזק האמיתי מ-`public` פתוח (יתרת בנק שלילית) — לא רק "עקרון OOP מופשט".

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הראו `account.Balance = -500;` על שדה public — "זה תקין?!" |
| הבעיה: שדה חשוף לגמרי | 10 דקות | הדגישו שאין שום דרך למנוע ערך לא הגיוני |
| הרעיון: Property עם get/set | 20 דקות | הראו get/set מפורש עם ולידציה ב-set |
| private set | 15 דקות | Age בדוגמת Student — קריאה חופשית, שינוי מוגבל |
| Access Modifiers | 15 דקות | private/public/protected (protected רק אזכור, יורחב בירושה) |
| Auto-Property | 10 דקות | קיצור התחביר כשאין לוגיקה מיוחדת |
| תרגול מודרך | 15 דקות | תרגיל 1+2 |

---

## דגשים להעברת השיעור

- ודאו שסטודנטים מבינים ש-Property **נראית** כמו שדה בצד הקורא — זו בדיוק הנקודה: שינוי פנימי (הוספת ולידציה) לא שובר קוד קיים שכבר משתמש ב-`obj.Balance`.
- אל תעמיקו ב-`protected` כאן — רק ציינו שהוא קיים ויוסבר בשיעור הירושה, כדי לא לעצור את הזרימה.
- כדאי להראות תחילה `get`/`set` "ארוך" (עם שדה גיבוי מפורש), ורק אחר כך Auto-Property כקיצור — כדי שהסטודנטים יבינו מה בדיוק מתקצר.

---

## מושגים

**Property** — "שדה חכם" עם `get`/`set` שמריצים קוד.
**`get`/`set`** — הלוגיקה שרצה בקריאה/בשינוי ערך.
**Access Modifier** — `private`/`public`/`protected`, קובע מי נגיש לחבר.
**Auto-Property** — קיצור תחבירי כשאין לוגיקה מיוחדת ב-get/set.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אם `Balance` היה שדה `public` רגיל, אילו שלוש דרכים אפשריות היו לקוד חיצוני 'לשבור' את החשבון בטעות או בכוונה?"

**מהלך:** אספו רעיונות — יתרה שלילית, קפיצה לערך שרירותי בלי תיעוד עסקה, איפוס בטעות ל-0. הובילו לתובנה: הבעיה היא לא "שיטה מסוימת של תקיפה", אלא **חוסר כל בקרה** — כל שינוי אפשרי ובלתי-מבוקר.

**מה המרצה מראה בסוף:** הריצו קוד עם `Balance` כשדה `public` וקוד חיצוני ששם אותו ל-`-500` — אין שום שגיאה, החשבון "שקוף לנזק". אחר כך אותו תרחיש עם Property ו-`set` שבודק ערכים שליליים — `ArgumentException` ברור, וההגנה עובדת.
