מדריך ומבוא לקורס 20906

קצת על הקורס: תכנות מונחה עצמים

ברוכים הבאים לאחד הקורסים המרתקים, הפילוסופיים והמעצבים ביותר בתואר למדעי המחשב. כאן לא לומדים עוד שפת תכנות שגרתית – כאן לומדים לחשוב מונחה עצמים באופן טהור (Pure OOP).

1 מהות הקורס: מודל טהור מול מודל היברידי

רוב הסטודנטים מגיעים לקורס כשהם מכירים שפות כגון Java, C++ או Python. שפות אלו מוגדרות כ-שפות היברידיות (Hybrid OOP): הן משלבות מנגנוני עצמים לצד תכנות פרוצדורלי קלאסי (משתנים פרימיטיביים כמו int ו-boolean שאינם עצמים, פקודות בקרה חיצוניות כמו if ו-for, ופונקציות סטטיות).

קורס זה בוחר בגישה רדיקלית וחינוכית מהמעלה הראשונה: שימוש בשפת Smalltalk-80 ובסביבת Squeak. Smalltalk היא שפה מונחית עצמים "טהורה" (Pure OOP) שפותחה במעבדות Xerox PARC על ידי ענקי המחשוב (אלן קיי, דן אינגלס ואדל גולדברג). בסמולטוק מתקיים מנגנון הפשטה אחד ויחיד:

💡
חוק היסוד של Smalltalk: הכל הוא עצם!

ב-Smalltalk אין שום דבר שאינו עצם. מספר שלם הוא עצם; מחרוזת היא עצם; קטע קוד בתוך סוגריים מרובעים הוא עצם (בלוק); תנאים ולולאות אינם מילות מפתח של השפה אלא הודעות שנשלחות לעצמים; ואפילו המחלקות עצמן הן עצמים חיים בזיכרון!

מאפיין השוואה Smalltalk (מודל טהור) Java / C++ (מודל היברידי)
האם הכל עצם? כן, 100% ללא יוצא מן הכלל לא (טיפוסים פרימיטיביים int, char)
מבני בקרה (תנאים ולולאות) הודעות רגילות הנשלחות לבוליאנים ולבלוקים (ifTrue:, whileTrue:) מילות מפתח קבועות מראש במהדר (if, while, for)
האם מחלקה היא עצם? כן! מופע של מטה-מחלקה ייעודית (Metaclass) רק ייצוג מוגבל דרך Reflection (המחלקה Class)
תחביר השפה תחביר מינימליסטי בן עמוד אחד בלבד (שליחת הודעות) תחביר מורכב, עמוס אופרטורים ומילות שמורות

2 מפת הדרכים: 7 חלקי הקורס ו-18 הפרקים

הקורס בנוי בצורה הדרגתית, החל מהבנת ההיסטוריה והצורך בהפשטה, דרך תכנות מעשי, ועד למודלים מתמטיים מופשטים:

חלק I • פרקים 1–2 מבוא והפשטה

הפשטה ופילוסופיית Smalltalk

למה Smalltalk, בעיית הקבועים החוזרים, 7 שלבי ההתפתחות ההיסטורית (משתנים, שגרות, מודולים, ADT ועד ל-Class ב-OOP).

חלק II • פרק 3 מודל העצם

המושג "עצם" וסוגי העתקות

שלושת מאפייני העצם (זהות ==, מצב פנימי והתנהגות), ו-4 סוגי העתקה קריטיים לבחינה (זהותית, רדודה, עמוקה ורקורסיבית).

חלק III • פרקים 4–5 סביבת Squeak

כלי הפיתוח והמשחק Quinto

מבנה ה-Image וה-Changes, כלי העבודה (Workspace, Browser, Debugger), ומימוש משחק הלוח Quinto ב-Smalltalk.

חלק IV • פרקים 6–9 תחביר ושליחת הודעות

תחביר, בלוקים והורשה

3 סוגי הודעות, Cascade (;), בלוקים ואיטרטורים, 3 סוגי עצמים בזיכרון, מתודות מחלקה מול static, משתני מופע של מחלקה, ו-self מול super.

חלק V • פרקים 10–12 מחלקות ואוספים

המחלקות, בבואה (Reflection) ואוספים

3 תפקידים ו-5 מרכיבים של מחלקה, בבואה ב-Java וב-Smalltalk, היררכיית האוספים (Collection, Array, Set, Dictionary) ואיטרטורים.

חלק VI • פרקים 13–17 סימולציה וגרפיקה

חידת המלכות והסביבה הגרפית Morphic

סימולציית 8 המלכות ו-8 הסימטריות, פתרון מונחה עצמים עם QueenTerminator, הכללה לתלת-ממד, וסביבת Morphic האינטראקטיבית.

חלק VII • פרק 18 (גולת הכותרת!) נושא המפתח במבחן

מטה-מחלקות (Metaclasses) ומודל 5 הרמות

איך מחלקות עצמן מיוצגות כעצמים? מהי המחלקה של מחלקה? 10 חוקי המודל האקסיומטיים, סיווג השפות ל-5 רמות, היררכיית המטה-מחלקות המקבילה, ומסלול יצירת מופע חדש (TranslucentColor new).

מדריך השימוש בפורטל הלימודי

קצת על האתר: חוויית למידה אינטראקטיבית

האתר תוכנן ונבנה במיוחד כדי לגשר על הפער שבין תיאוריה מופשטת לבין הבנה אינטואיטיבית עמוקה. כאן תמצאו מעטפת למידה מלאה לכל שלב בסמסטר.

1 החזון: למידה אקטיבית וחיה

שפת Smalltalk היא סביבה חיה (Living System). ללמוד אותה מתוך דפי נייר סטטיים זה כמו ללמוד שחייה בהתכתבות. לכן, הפורטל נבנה כדי להעניק לכם:

👁️
המחשה ויזואלית

דיאגרמות אינטראקטיביות של אובייקטים בזיכרון, שרשראות ירושה ועצי מחלקות.

⚡
משוב מיידי

שאלות אמריקאיות עם בדיקה אוטומטית והסבר מעמיק על כל מסיח נכון או שגוי.

🎯
הכנה ממוקדת

הפרדה חדה בין עיקר לטפל, סיכום מקיף, ותרגול מסיבי של בחינות גמר אמיתיות.

2 ארגז הכלים הייחודי באתר

📖

18 פרקי לימוד מקיפים

כל פרק בקורס זוכה לדף ייעודי מלא, עם הסברים בהירים, קטעי קוד מוארים בתחביר צבעוני, כרטיסיות הבנה (Flashcards) ושאלות מנחות.

🕹️

סימולטורים אינטראקטיביים

משחק Quinto חי, סימולטור ביצוע הודעות ו-Cascade, מעקב אחר חיפוש מתודות (self/super), לוח 8 המלכות, ומעבדת Morphic גרפית.

❓

שאלות אמריקאיות בסרגל הצד

בכל פרק משולבות עשרות שאלות רב-ברירתיות לבדיקה עצמית, עם רמזים, הסברים מפורטים למסיחים ושמירת התקדמות ב-Local Storage.

🏆

סיכום מקיף ומאגר מבחנים

קובץ summary.html העצמאי שמסכם את כל החומר לימי החזרה, ומאגר exams.html המכיל בחינות פתורות ומנותחות.

סודות ההצלחה בבחינת הגמר

קצת על המבחן: איך מוציאים 100?

המבחן ב"תכנות מונחה עצמים" (20906) ידוע כמבחן מדויק, הוגן אך מתגמל מאוד למי ששולט בעקרונות הברזל. כאן ריכזנו את מבנה הבחינה, חלוקת הניקוד, 5 המלכודות הנפוצות ביותר וטיפים להצלחה.

1 מבנה הבחינה וחלוקת הניקוד

משך הבחינה הוא 3 שעות (בתוספת הארכת זמן לזכאים). המבחן משלב שאלות רב-ברירתיות (אמריקאיות) לצד שאלות פתוחות של ניתוח קוד וכתיבת מתודות:

חלק בבחינה נושאי מפתח ודגשים ניקוד משוער
חלק א': שאלות הבנה ואמריקאיות תחביר Smalltalk, סדר קדימויות ו-Cascade, בלוקים, סוגי העתקה (רדודה/עמוקה ב-Java וב-Smalltalk), תפקידי מחלקה, ובבואה (Reflection). 30–40 נקודות
חלק ב': ניתוח קוד וירושה מעקב אחר איתור מתודות (self מול super), טיפול ב-doesNotUnderstand:, משתני מופע של מחלקה (דוגמת Dog ו-Hyena), תבנית Singleton, והרחבה מול דריסה. 30–35 נקודות
חלק ג': מטה-מחלקות (פרק 18) ★ שאלת חובה קבועה בכל מבחן! שרשראות שליחת הודעת class ו-superclass, 10 חוקי המודל האקסיומטיים, ומסלול יצירת מופע (TranslucentColor new). 25–35 נקודות!

2 5 מלכודות המבחן הנפוצות ביותר (חובה לדעת!)

הסגל של הקורס אוהב לבחון על נקודות עדינות שבהן מי שאינו מדייק נופל מיד:

⚠️
מלכודת 1: אין קדימות לכפל על פני חיבור ב-Smalltalk!

ב-Smalltalk כל האופרטורים הבינריים הם בעלי אותה קדימות בדיוק ומוערכים משמאל לימין. הביטוי 2 + 3 * 4 יחזיר 20 (ולא 14!), כי תחילה מבוצע 2 + 3 = 5 ואז 5 * 4 = 20!

⚠️
מלכודת 2: משתנה המקבל בשליחה ל-super נשאר תמיד self!

השליחה ל-super משנה אך ורק את מקום תחילת חיפוש המתודה (במחלקת-העל), אך המקבל (העצם שעליו מופעלת המתודה) נשאר העצם המקורי (self)! אם המתודה שנמצאה ב-super קוראת למתודה אחרת דרך self, החיפוש יתחיל שוב מהמחלקה המקורית של העצם!

⚠️
מלכודת 3: ערך החזרה ברירת מחדל ממתודה הוא ^ self!

אם מתודה בסמולטוק אינה כוללת חץ החזרה (^) מפורש, היא מחזירה כברירת מחדל את self (העצם המקבל) ולא nil! (כמו שראינו בבאג המפורסם של newCellAt:at: בפרק 5).

⚠️
מלכודת 4: שרשרת class על Metaclass נסגרת במעגל!

המחלקה של כל מטה-מחלקה היא המחלקה Metaclass. ומהי המחלקה של Metaclass? היא Metaclass class! ומהי המחלקה של Metaclass class? היא חוזרת שוב להיות Metaclass! המעגל הזה מבטיח שאין אינסוף רמות במערכת.

⚠️
מלכודת 5: אופרטור Cascade (;) פועל תמיד על אותו המקבל המקורי!

נקודה-פסיק (;) שולחת את ההודעה הבאה לאותו המקבל של ההודעה הקודמת ולא לתוצאת ההודעה! בביטוי OrderedCollection new add: 1; add: 2; size, תוצאת הביטוי היא 2 (האוסף עם 2 איברים), בעוד שללא נקודה-פסיק היה ניסיון לשלוח add לתוצאת ה-add הקודם!

3 איך להתכונן בפועל? המלצות זהב

1️⃣
שליטה ללא עוררין בפרק 18: שבו ושרטטו ביד את היררכיית המטה-מחלקות המקבילה, את 10 חוקי המודל ואת מסלול החיפוש של TranslucentColor new. 25–30 נקודות בכיס!
2️⃣
פתרון מבחנים עם דף ועיפרון: אל תסתפקו בקריאת פתרונות מוכנים! פתחו את מאגר המבחנים, פתרו בעצמכם ורק לאחר מכן השוו לפתרון המפורט.
3️⃣
חזרה מהירה בעזרת הסיכום המקיף: ביומיים שלפני המבחן, עברו על summary.html. כל ההגדרות, הטבלאות והחוקים מרוכזים שם ללא בזבוז זמן.