On this page
מערך שיעור: 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 ברור, וההגנה עובדת.