On this page
מערך שיעור: Generics
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו למה List<T>/Dictionary<TKey,TValue> עובדים על כל טיפוס, ויכתבו מחלקה Generic משלהם.
בסוף השיעור הסטודנטים צריכים: להסביר למה T שומר Type Safety בעוד object מאבד אותה, לכתוב מחלקה/מתודה Generic פשוטה, ולהשתמש ב-where constraint בסיסי.
דגש קריטי: הסטודנטים כבר משתמשים ב-List<T> שבועות ארוכים — נצלו את זה: “אתם כבר יודעים להשתמש ב-Generics, היום לומדים איך לכתוב כאלה בעצמכם”.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הזכירו: “List |
| הבעיה: שכפול קוד לכל טיפוס | 10 דקות | הראו IntStack/StringStack עם קוד זהה — כפילות בוטה |
| הרעיון: T כ-placeholder | 15 דקות | Box |
| Type Safety מול object | 15 דקות | השוו Box |
| Dictionary<TKey,TValue> | 15 דקות | שני Type Parameters, שימוש מעשי |
| where constraint | 15 דקות | FindMax |
| תרגול מודרך | 15 דקות | תרגיל 1+2 |
דגשים להעברת השיעור
- הקישור ל-
List<T>/Dictionaryשכבר מוכרים הוא נקודת המפתח — סטודנטים “כבר יודעים” להשתמש בזה, היום רק פותחים את הקופסה השחורה. - ההשוואה ל-
object(איבוד Type Safety) היא ההוכחה הכי משכנעת ל"למה Generics ולא סתם object לכל דבר" — הדגימו קריסת casting בפועל אם יש זמן. whereconstraint מספיק להראות בדוגמה אחת פשוטה (IComparable<T>) — אין צורך בכל הסוגים האפשריים של constraints בשלב הזה.
מושגים
T (Type Parameter) — placeholder לטיפוס, נקבע בשימוש קונקרטי.
Generic Class/Method — מוגדרים עם <T>, עובדים על כל טיפוס תואם.
Type Safety — בדיקת טיפוסים בקומפילציה, נשמרת גם עם Generics.
where constraint — מגביל אילו טיפוסים מותר להשתמש כ-T.
תרגיל חשיבה
שאלת פתיחה: “בלי Generics, כמה מחלקות Stack שונות הייתם צריכים כדי לתמוך ב-int, string, ו-Student? מה קורה כשמוסיפים טיפוס רביעי?”
מהלך: תנו לסטודנטים לחשב — 3 מחלקות זהות פרט לשם הטיפוס, וטיפוס רביעי דורש מחלקה רביעית זהה. הובילו לתובנה: זו בדיוק אותה בעיה שפונקציות פתרו (כפילות קוד) — רק ברמת טיפוסים במקום ברמת לוגיקה.
מה המרצה מראה בסוף: כתבו Box<T> פעם אחת, והשתמשו בה עם 3 טיפוסים שונים (int, string, Student מהיחידה הקודמת) בלי לשנות אף שורה במחלקה עצמה. הניגוד מול “3 מחלקות זהות” שדיברתם עליו בפתיחה הוא כל הסיפור.