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

מטרת השיעור: הסטודנטים יבינו למה List<T>/Dictionary<TKey,TValue> עובדים על כל טיפוס, ויכתבו מחלקה Generic משלהם.

בסוף השיעור הסטודנטים צריכים: להסביר למה T שומר Type Safety בעוד object מאבד אותה, לכתוב מחלקה/מתודה Generic פשוטה, ולהשתמש ב-where constraint בסיסי.

דגש קריטי: הסטודנטים כבר משתמשים ב-List<T> שבועות ארוכים — נצלו את זה: “אתם כבר יודעים להשתמש ב-Generics, היום לומדים איך לכתוב כאלה בעצמכם”.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו: “List, List, List — אותו קוד בדיוק. איך?”
הבעיה: שכפול קוד לכל טיפוס10 דקותהראו IntStack/StringStack עם קוד זהה — כפילות בוטה
הרעיון: T כ-placeholder15 דקותBox — מחלקה אחת, כמה שימושים
Type Safety מול object15 דקותהשוו Box ל-Box עם object — הראו קריסת casting אפשרית
Dictionary<TKey,TValue>15 דקותשני Type Parameters, שימוש מעשי
where constraint15 דקותFindMax, קישרו ל-IComparable שכבר מוכר
תרגול מודרך15 דקותתרגיל 1+2

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

  • הקישור ל-List<T>/Dictionary שכבר מוכרים הוא נקודת המפתח — סטודנטים “כבר יודעים” להשתמש בזה, היום רק פותחים את הקופסה השחורה.
  • ההשוואה ל-object (איבוד Type Safety) היא ההוכחה הכי משכנעת ל"למה Generics ולא סתם object לכל דבר" — הדגימו קריסת casting בפועל אם יש זמן.
  • where constraint מספיק להראות בדוגמה אחת פשוטה (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 מחלקות זהות” שדיברתם עליו בפתיחה הוא כל הסיפור.