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

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

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

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


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהראו account.Balance = -500; על שדה public — “זה תקין?!”
הבעיה: שדה חשוף לגמרי10 דקותהדגישו שאין שום דרך למנוע ערך לא הגיוני
הרעיון: Property עם get/set20 דקותהראו get/set מפורש עם ולידציה ב-set
private set15 דקותAge בדוגמת Student — קריאה חופשית, שינוי מוגבל
Access Modifiers15 דקותprivate/public/protected (protected רק אזכור, יורחב בירושה)
Auto-Property10 דקותקיצור התחביר כשאין לוגיקה מיוחדת
תרגול מודרך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 ברור, וההגנה עובדת.