קצת על הקורס: תכנות מונחה עצמים
ברוכים הבאים לאחד הקורסים המרתקים, הפילוסופיים והמעצבים ביותר בתואר למדעי המחשב. כאן לא לומדים עוד שפת תכנות שגרתית – כאן לומדים לחשוב מונחה עצמים באופן טהור (Pure OOP).
1 מהות הקורס: מודל טהור מול מודל היברידי
רוב הסטודנטים מגיעים לקורס כשהם מכירים שפות כגון Java, C++ או Python. שפות אלו מוגדרות כ-שפות היברידיות (Hybrid OOP): הן משלבות מנגנוני עצמים לצד תכנות פרוצדורלי קלאסי (משתנים פרימיטיביים כמו int ו-boolean שאינם עצמים, פקודות בקרה חיצוניות כמו if ו-for, ופונקציות סטטיות).
קורס זה בוחר בגישה רדיקלית וחינוכית מהמעלה הראשונה: שימוש בשפת Smalltalk-80 ובסביבת Squeak. Smalltalk היא שפה מונחית עצמים "טהורה" (Pure OOP) שפותחה במעבדות Xerox PARC על ידי ענקי המחשוב (אלן קיי, דן אינגלס ואדל גולדברג). בסמולטוק מתקיים מנגנון הפשטה אחד ויחיד:
ב-Smalltalk אין שום דבר שאינו עצם. מספר שלם הוא עצם; מחרוזת היא עצם; קטע קוד בתוך סוגריים מרובעים הוא עצם (בלוק); תנאים ולולאות אינם מילות מפתח של השפה אלא הודעות שנשלחות לעצמים; ואפילו המחלקות עצמן הן עצמים חיים בזיכרון!
| מאפיין השוואה | Smalltalk (מודל טהור) | Java / C++ (מודל היברידי) |
|---|---|---|
| האם הכל עצם? | כן, 100% ללא יוצא מן הכלל | לא (טיפוסים פרימיטיביים int, char) |
| מבני בקרה (תנאים ולולאות) | הודעות רגילות הנשלחות לבוליאנים ולבלוקים (ifTrue:, whileTrue:) |
מילות מפתח קבועות מראש במהדר (if, while, for) |
| האם מחלקה היא עצם? | כן! מופע של מטה-מחלקה ייעודית (Metaclass) | רק ייצוג מוגבל דרך Reflection (המחלקה Class) |
| תחביר השפה | תחביר מינימליסטי בן עמוד אחד בלבד (שליחת הודעות) | תחביר מורכב, עמוס אופרטורים ומילות שמורות |
2 מפת הדרכים: 7 חלקי הקורס ו-18 הפרקים
הקורס בנוי בצורה הדרגתית, החל מהבנת ההיסטוריה והצורך בהפשטה, דרך תכנות מעשי, ועד למודלים מתמטיים מופשטים:
הפשטה ופילוסופיית Smalltalk
למה Smalltalk, בעיית הקבועים החוזרים, 7 שלבי ההתפתחות ההיסטורית (משתנים, שגרות, מודולים, ADT ועד ל-Class ב-OOP).
המושג "עצם" וסוגי העתקות
שלושת מאפייני העצם (זהות ==, מצב פנימי והתנהגות), ו-4 סוגי העתקה קריטיים לבחינה (זהותית, רדודה, עמוקה ורקורסיבית).
כלי הפיתוח והמשחק Quinto
מבנה ה-Image וה-Changes, כלי העבודה (Workspace, Browser, Debugger), ומימוש משחק הלוח Quinto ב-Smalltalk.
תחביר, בלוקים והורשה
3 סוגי הודעות, Cascade (;), בלוקים ואיטרטורים, 3 סוגי עצמים בזיכרון, מתודות מחלקה מול static, משתני מופע של מחלקה, ו-self מול super.
המחלקות, בבואה (Reflection) ואוספים
3 תפקידים ו-5 מרכיבים של מחלקה, בבואה ב-Java וב-Smalltalk, היררכיית האוספים (Collection, Array, Set, Dictionary) ואיטרטורים.
חידת המלכות והסביבה הגרפית Morphic
סימולציית 8 המלכות ו-8 הסימטריות, פתרון מונחה עצמים עם QueenTerminator, הכללה לתלת-ממד, וסביבת Morphic האינטראקטיבית.
מטה-מחלקות (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 מלכודות המבחן הנפוצות ביותר (חובה לדעת!)
הסגל של הקורס אוהב לבחון על נקודות עדינות שבהן מי שאינו מדייק נופל מיד:
ב-Smalltalk כל האופרטורים הבינריים הם בעלי אותה קדימות בדיוק ומוערכים משמאל לימין. הביטוי 2 + 3 * 4 יחזיר 20 (ולא 14!), כי תחילה מבוצע 2 + 3 = 5 ואז 5 * 4 = 20!
השליחה ל-super משנה אך ורק את מקום תחילת חיפוש המתודה (במחלקת-העל), אך המקבל (העצם שעליו מופעלת המתודה) נשאר העצם המקורי (self)! אם המתודה שנמצאה ב-super קוראת למתודה אחרת דרך self, החיפוש יתחיל שוב מהמחלקה המקורית של העצם!
אם מתודה בסמולטוק אינה כוללת חץ החזרה (^) מפורש, היא מחזירה כברירת מחדל את self (העצם המקבל) ולא nil! (כמו שראינו בבאג המפורסם של newCellAt:at: בפרק 5).
המחלקה של כל מטה-מחלקה היא המחלקה Metaclass. ומהי המחלקה של Metaclass? היא Metaclass class! ומהי המחלקה של Metaclass class? היא חוזרת שוב להיות Metaclass! המעגל הזה מבטיח שאין אינסוף רמות במערכת.
נקודה-פסיק (;) שולחת את ההודעה הבאה לאותו המקבל של ההודעה הקודמת ולא לתוצאת ההודעה! בביטוי OrderedCollection new add: 1; add: 2; size, תוצאת הביטוי היא 2 (האוסף עם 2 איברים), בעוד שללא נקודה-פסיק היה ניסיון לשלוח add לתוצאת ה-add הקודם!
3 איך להתכונן בפועל? המלצות זהב
TranslucentColor new. 25–30 נקודות בכיס!