סביבת Squeak: הורדה, קובצי הליבה, ממשק העכבר ותפריט העולם
איך מורידים ומתקינים את חבילת ה-All-in-One, מהו השילוש של קובצי המערכת (image, sources, changes), איך פועלת מוסכמת שלושת צבעי העכבר (אדום, צהוב, כחול) וה-Morphic Halo, וכיצד שומרים ויוצאים מהעולם החי.
מודל מנטלי ועיקרון מנחה: לחיות ולנשום בתוך "עולם" זיכרון חי של עצמים!
בניגוד לסביבות פיתוח רגילות (כמו Eclipse או Visual Studio) שבהן כותבים קוד טקסטואלי שמקומפל לקבצים חיצוניים, ב-Squeak אנחנו חיים בתוך "אקווריום" חי: כל חלון, כפתור ושורת קוד הם עצמים (Objects) חיים השמורים כצילום מצב בזיכרון (`.image`).
לפני ההפעלה הראשונית חובה לגבות את קובץ התמונה (`.image`) ואת קובץ השינויים (`.changes`)! במהלך העבודה קבצים אלו מתעדכנים ברציפות, וגיבוי מקדים מאפשר לחזור לנקודת התחלה נקייה במקרה של שגיאה מערכתית.
השליטה בעולם של Squeak מתבססת על מוסכמת שלושת צבעי העכבר: אדום (שמאלי) לבחירה ולתפריט העולם, צהוב (ימני) לתפריט הקשר, וכחול (אמצעי) להילת ה-Morphic Halo.
1. סעיף 4.1: הורדה והתקנה של סביבת העבודה ושלושת קובצי היסוד
חבילת ה-All-in-One, קובצי האצווה ותיקיית Resources
ברוך הבא לחלק המעשי של המסע שלנו! אחרי שהכרנו את הרעיונות של תכנות מונחה עצמים, הגיע הזמן שנפתח יחד את סביבת הפיתוח החיה Squeak ונלמד לשלוט בה בידיים.
סביבת Squeak ניתנת להורדה ללא תשלום מהאתר הרשמי (http://www.squeak.org/). כדי לחסוך כל התעסקות מיותרת בהגדרות תשתית, מומלץ להוריד את חבילת ה-All-in-One, הכוללת סביבה מוכנה להפעלה עבור כל מערכות ההפעלה העיקריות (Windows, Linux, macOS).
לאחר שנפרוס את החבילה, תיווצר תיקייה הנושאת את שם הגרסה (למשל Squeak5.1-16549-32bit-All-in-One או בקיצור SqueakX). בתוך התיקייה הזו נמצא קובצי אצווה להפעלה ישירה ומהירה (squeak.bat עבור Windows ו-squeak.sh עבור Linux), ולצידם תת-ספרייה מרכזית בשם Resources.
כאן מסתתר הסוד הארכיטקטוני של Squeak: הסביבה אינה קובץ הרצה סטנדרטי בודד, אלא נשענת על שלושה קובצי ליבה קריטיים הפועלים יחד בתוך ספריית Resources:
1. קובץ התמונה (.image)
הלב הפועם של המערכת! קובץ זה מכיל את "תמונת" (Snapshot) מצב הזיכרון המדויקת של סביבת הריצה כפי שנשמרה לאחרונה — כולל המצב של כל העצמים הפעילים, המחלקות והמתודות הקיימות במערכת בנקודת השמירה.
2. קובץ המקורות (.sources)
קובץ לקריאה בלבד (Read-Only) המכיל את קוד המקור (Source Code) הבסיסי של מחלקות המערכת המתאימות לגרסה זו (החל מאותה גרסה X). הוא אינו משתנה במהלך העבודה שלך.
3. קובץ השינויים (.changes)
יומן דינמי המתעד את רשימת כל השינויים, התוספות ועריכות הקוד שביצעת במערכת על גבי קובצי המקור מאז יצירת קובץ ה-sources והפעלת הסביבה.
2. סעיף 4.2: הפעלת הסביבה, גיבוי, מבנה "העולם" ומוסכמת שלושת כפתורי העכבר
המכונה הווירטואלית (VM), חלון Welcome to Squeak, פקדי החלונות והעכבר התלת-צבעוני
🛡️ המלצת גיבוי קריטית לפני ההפעלה הראשונית!
רגע לפני שאתה מפעיל את הסביבה בפעם הראשונה, אני ממליץ לך בחום לגבות את קובץ התמונה (.image) ואת קובץ השינויים (.changes)! מדוע? משום שבמהלך העבודה השוטפת שני הקבצים האלה מתעדכנים ומשתנים באופן רציף. גיבוי מקדים יאפשר לך תמיד לחזור ל"נקודת התחלה" נקייה במקרה של שגיאה מערכתית.
איך מפעילים את הסביבה? ההפעלה מתבצעת על ידי הרצת המכונה הווירטואלית (Virtual Machine – VM) והעברת קובץ התמונה כפרמטר אליה (למשל: Squeak.exe Squeak5.1-16549-32bit.image), או בצורה מהירה ופשוטה באמצעות קובצי האצווה (squeak.bat / squeak.sh).
ברגע שהסביבה עולה, נפגוש את המרכיבים הבאים על המסך:
- חלון הפתיחה (
Welcome to Squeak): מופיע בהפעלה הראשונית ומאפשר להגדיר את המראה והתחושה (Look and Feel) של הסביבה (ניתן לבחורConfigureאוSkip). - העולם (
World): שטח הרקע המרכזי של כל סביבת העבודה מתפקד כ"שולחן עבודה" חי ואינטראקטיבי ונקרא "העולם" (World). - שורת התפריטים העליונה: כוללת תפריטים מובנים (
Projects,Tools,Appsועוד), שעון, שורת חיפוש מהירה וכפתור למסך מלא. - פקדי החלונות: כותרת כל חלון מכילה כפתורי שליטה — סגירה (
x), פתיחת תפריט פנימי של החלון, הרחבה למסך מלא (+), ומזעור/צמצום למינימום (-). הצבת סמן העכבר מעל כל פקד מציגה בועת הסבר (Tooltip) המתארת את פעולתו.
🖱️ מוסכמת שלושת כפתורי העכבר (אדום, צהוב, כחול)
סביבת Squeak נשענת על מודל היסטורי הממפה את פעולות הממשק לשלושה צבעים של כפתורי עכבר:
1. הכפתור האדום (Red Button)
הכפתור הראשי: משמש לבחירת פריטים מתפריטים ומרשימות, סימון טקסט ולחיצה על פקדים. לחיצה איתו על הרקע החופשי מעלה את תפריט העולם (World Menu).
2. הכפתור הצהוב (Yellow Button)
כפתור תלוי-הקשר: מעלה תפריט הקשר (Context Menu) התלוי בעצם או בחלון שעליו לחצו (למשל, לחיצה ימנית על אזור הטקסט של חלון Welcome to Squeak תציג תפריט עריכת טקסט ופעולות קוד).
3. הכפתור הכחול (Blue Button)
מקיף את העצם הנבחר במסגרת צלמיות ייעודית הנקראת Morphic Halo (הילת מורפיק), המשמשת לשינוי ישיר של תכונותיו החזותיות: הזזה, סיבוב, שינוי גודל, מחיקה או שכפול!
3. סעיפים 4.3–4.4: תפריט העולם (World Menu), שמירה ויציאה מהמערכת
קיבוע התפריט באמצעות נעץ (Pin), תפריט המשנה open..., מקשי קיצור ופקודות save and quit
🌍 סעיף 4.3: תפריט העולם (World Menu)
- פתיחה וקיבוע: נפתח בלחיצה שמאלית (כפתור אדום) על הרקע החופשי של העולם, ונעלם בלחיצה שנייה. ניתן לקבע אותו לצמיתות למסך על ידי לחיצה על צלמית הנעץ (Pin) שבפינת הכותרת שלו.
- פתיחת כלים מרכזיים: מאפשר גישה ישירה ל-
Browser,Workspace,Transcript,Test Runner. - תפריט משנה
open...: פותח תפריט נוסף עם מגוון עשיר של כלי מערכת כגוןclass browser,workspace,Method Finder,Process Browser,File Listועוד. - מקשי קיצור: לצד פריטים רבים מופיע מקש קיצור בסוגריים; צירופו עם מקש
Ctrlמפעיל את הפקודה ישירות (למשלCtrl+tפותח חלוןTranscript).
💾 סעיף 4.4: שמירה ויציאה מסביבת העבודה
save and quit(שמירה מלאה ויציאה): ממוקמת בתחתית תפריט העולם. שומרת את תמונת הזיכרון המדויקת של המערכת אל תוך קובץ ה-.imageויוצאת. בהפעלה הבאה המערכת חוזרת בדיוק לאותו המצב שבו נשמרה (כולל חלונות פתוחים, מיקומם והעצמים שנוצרו)!save: שמירת התמונה הנוכחית תוך המשך עבודה שוטפת.save as...: שמירת תמונת המערכת בשם קובץ חדש (מומלץ ליצירת נקודות גיבוי).save as new version: שמירה כגרסה ממוספרת עוקבת.quit: יציאה מהסביבה ללא שמירת שינויים.
המכונה הווירטואלית (VM) מול קובצי Resources ומוסכמת האדום-צהוב-כחול
מיני-סימולציה 4.1: סייר קובצי הליבה, העכבר התלת-כפתורי ואפשרויות השמירה
מעבדת העולם (World), שלושת כפתורי העכבר וה-Morphic Halo
התנסה בשולחן העבודה החי של Squeak: הפעל את שלושת כפתורי העכבר (אדום/שמאלי לפתיחת תפריט העולם וקיבועו בנעץ 📌, צהוב/ימני לתפריט ההקשר, וכחול/אמצעי להילת ה-Morphic Halo שמאפשרת לסובב, לשנות גודל, להזיז, לשכפל או למחוק את העצם), ובדוק את פעולת save and quit!
חלון הפתיחה החי ב-"World": בחר Configure או Skip, או הפעל עליי Morphic Halo!
🖱️ הפעל את שלושת כפתורי העכבר של Squeak:
הגשר הנרטיבי: הכרנו את קובצי המערכת, תפריט העולם והעכבר – אבל איפה אנחנו כותבים ומריצים קוד חי?
עכשיו, כשאנחנו יודעים לפתוח את תפריט העולם (World Menu) ולשמור את תמונת הזיכרון שלנו ב-.image, הגיע הזמן לפתוח את שני החלונות הראשונים שלנו: חלון העבודה (Workspace) וחלון ההודעות (Transcript)!
בלשונית הבאה נגלה את ההבדל המכריע בין do it לבין print it, נלמד לשרשר הודעות (Cascade) באמצעות נקודה-פסיק (;), ונצלול אל תוך הבטן של העצמים בעזרת ה-Inspector וה-Explorer!
פקודות חיות: Workspace, Transcript, כלי בחינת עצמים (Inspector / Explorer) ו-SqueakMap
איך מריצים קטעי קוד ב-Workspace, מה ההבדל המהותי בין do it לבין print it, איך משרשרים הודעות (Cascade) לאותו עצם באמצעות נקודה-פסיק (;), ואיך בוחנים את מצבו הפנימי של עצם חי בעזרת Inspector ו-Explorer.
מודל מנטלי ועיקרון מנחה: כל ביטוי מחזיר עצם — השאלה היא מה אנחנו עושים עם העצם שחזר!
פקודת do it היא כמו לבקש משף להכין מנה במטבח הסגור — המנה הוכנה (החישוב התבצע), אך אם לא ביקשת להגיש אותה, לא תראה דבר! לעומת זאת, print it מבקשת מהמנה שחזרה לתאר את עצמה בטקסט (printString) ומדפיסה אותה מיד מולך.
הפרדת משפטים שונים נעשית בנקודה (.), אך כאשר שולחים מספר הודעות ברצף אל אותו העצם המקבל, נשתמש בשרשור הודעות (Cascade) עם נקודה-פסיק (;): Transcript show: 'hello world'; cr..
ב-Inspector (`Ctrl+i`) כותרת החלון מציינת את שם המחלקה של העצם הנבדק (ולא את שם המשתנה!), והחלונית התחתונה היא Mini-Workspace שבו self מקושר ישירות לעצם הנבדק.
1. סעיף 4.5 א': חלון עבודה (Workspace), חלון הודעות (Transcript) וביצוע ביטויים
הרצת קוד באמצעות do it (d), ירידת שורה עם cr, ושרשור הודעות (Cascade) באמצעות נקודה-פסיק (;)
כדי להתחיל לדבר עם העצמים החיים בסביבת Squeak, אנחנו פותחים שני חלונות יסודיים מתוך תפריט העולם (World Menu) או מסרגל התפריטים העליון תחת האפשרות Tools:
📝 חלון עבודה (Workspace)
חלון עבודה רב-שימושי המשמש כמשטח טיוטה אינטראקטיבי לכתיבה ולהצגה של טקסט, ובעיקר — להרצה ולביצוע של קטעי קוד (Scripts) בשפת Smalltalk.
📟 חלון הודעות (Transcript)
משמש כקונסול פלט (Console) ראשי של המערכת להצגת הודעות טקסטואליות ונתונים (קיצור מקלדת לפתיחתו: Ctrl+t). כדי להדפיס אליו, אנו שולחים אליו הודעות ישירות!
▶️ ביצוע ביטוי באמצעות do it (d) ושרשור הודעות (Cascade)
בוא נכתוב את שורת הקוד הראשונה שלנו בתוך ה-Workspace:
מה קורה בשורה הזו? הביטוי שולח לעצם הגלובלי Transcript את ההודעה show: עם הארגומנט (המחרוזת) 'hello world'.
כדי להריץ את השורה, אנחנו מסמנים את הטקסט ובוחרים באפשרות do it (d) מתוך תפריט ההקשר הצהוב (כפתור ימני בעכבר), או לוחצים על קיצור המקלדת Ctrl+d (או Alt+d). מיד לאחר הביצוע, המחרוזת hello world תופיע בתוך חלון ה-Transcript!
אם נבצע את הפקודה הזו שוב, הטקסט החדש יודפס באותה השורה בצמוד לטקסט הקודם. כדי לבקש מה-Transcript לרדת לשורה חדשה (Carriage Return), נשלח אליו את ההודעה האונרית cr:
Transcript cr.
שים לב שאפשר לבצע מספר ביטויים ברצף על ידי הפרדתם בנקודה (.). אבל יש דרך אלגנטית הרבה יותר! כאשר אנחנו שולחים מספר הודעות ברצף אל אותו העצם המקבל (כאן: Transcript), אנחנו יכולים להשתמש בתחביר מקוצר שנקרא שרשור הודעות (Cascade) באמצעות נקודה-פסיק (;) — כותבים את שם המקבל פעם אחת בלבד, ומפרידים בין ההודעות הנשלחות אליו באמצעות ;:
2. סעיף 4.5 ב': ההבדל המכריע בין do it (d) לבין print it (p)
למה הרצת 3 + 4 עם do it אינה מציגה דבר, ואיך print it משתמשת בהודעה printString?
בוא נעשה ניסוי מחשבתי חשוב: מה יקרה אם נרשום ב-Workspace את הביטוי 3 + 4, נסמן אותו ונבצע do it (Ctrl+d)?
הביטוי שולח למספר 3 את ההודעה + עם הארגומנט 4. המספר 3 מבצע את החישוב ומחזיר את העצם 7.
אבל על המסך לא יוצג שום דבר! לא ב-Workspace ולא ב-Transcript. מדוע? כי פקודת do it מריצה את הקוד בלבד ואינה עושה שום שימוש בעצם החוזר מהביטוי!
כדי לראות את התוצאה של ביטוי, אנו משתמשים בפקודה print it (p) (קיצור מקלדת: Ctrl+p או Alt+p):
⚙️ do it (d) — ביצוע שקט ללא הצגת הערך החוזר
מחשבת את הביטוי המסומן "מאחורי הקלעים" ומתעלמת מהעצם המוחזר. מתאימה לפקודות שיש להן תופעת לוואי גלויה משל עצמן (כמו Transcript show: 'hello world'. או פתיחת חלון).
🖨️ print it (p) — חישוב + שליחת printString והדפסה
מעריכה תחילה את הביטוי (כמו do it), ולאחר מכן תופסת את העצם המוחזר ושולחת אליו אוטומטית את ההודעה printString! הודעה זו מחזירה ייצוג טקסטואלי של העצם, והתוצאה מודפסת ומודגשת בחלון ה-Workspace מיד לאחר הביטוי המסומן (באותה השורה):
• הרצת 3 + 4 עם print it תציג: 7
• הרצת Time now עם print it תציג את השעה הנוכחית!
3. סעיפים 4.5 ג'–4.6: בחינת עצמים (Inspector ו-Explorer) וטעינת חבילות ב-SqueakMap
ניתוח מצבו הפנימי של עצם ב-Inspector, תצוגת עץ היררכית ב-Explorer וקטלוג החבילות הקהילתי SqueakMap
אחת היכולות היפות ביותר בסביבת Squeak היא שאנחנו לא צריכים לנחש מה קורה בתוך עצם חי — אנחנו יכולים לפתוח אותו ולחקור את מצבו הפנימי באמצעות שני כלים משלימים:
מפקח העצמים (Inspector)
כלי המאפשר לנתח את מצבו הפנימי ("הבטן") של עצם ולשלוח אליו הודעות (למשל על העצם 7 מופע של SmallInteger או על Time now):
- כותרת החלון: מציינת את שם המחלקה של העצם הנבדק (ולא את שם המשתנה!).
- החלונית השמאלית: מציגה את
self(העצם עצמו), אתall inst vars, ואת רשימת כל משתני המופע (Instance Variables) של העצם. - החלונית הימנית: מציגה את הערך / הייצוג הטקסטואלי של המשתנה שנבחר משמאל.
- החלונית התחתונה: מתפקדת כחלון עבודה מקומי (Mini-Workspace) שבו המשתנה
selfמקושר ישירות לעצם הנבדק! כתיבתself squaredבחלונית זו וביצועprint itעל העצם7תחזיר את הערך49.
סייר העצמים ההיררכי (Explorer)
כלי מתקדם המציג את העצם ומבנהו בצורת עץ היררכי (Tree View) ומאפשר ניווט נוח בין תתי-עצמים:
- לחיצה על המשולשים הקטנים פותחת ופורסת את מבנה העצם ומציגה פרטים כגון מחלקת-העל (
superclass), מילון המתודות (methodDict),format, רשימת משתני המופע (instanceVariables) ועוד. - מעבר מהיר: ניתן לעבור בקלות בין
Inspectorל-Explorerולהיפך באמצעות כפתור ייעודי בפינה הימנית-תחתונה של החלון!
🌐 סעיף 4.6: טעינת חבילות תוכנה באמצעות SqueakMap
כלי ה-SqueakMap משמש כקטלוג ומנגנון מובנה לטעינת חבילות תוכנה (Software Packages) מרשת האינטרנט ישירות לתוך סביבת העבודה Squeak. באמצעותו ניתן לאתר, להוריד ולהתקין תוספות, ספריות ויישומים חיצוניים שפותחו ופורסמו על ידי קהילת המפתחים העולמית של Squeak.
מסלול הביצוע של do it מול print it ומבנה 3 החלוניות של ה-Inspector
מיני-סימולציה 4.2: בוחן הפקודות וכלי הבחינה (do it, print it, Cascade, Inspector, Explorer, SqueakMap)
מעבדת Workspace, Transcript ומפקח העצמים החי (Inspector & Explorer)
בחר ביטוי ב-Workspace והרץ אותו באמצעות do it (d), print it (p), inspect it (i) או explore it (I). שים לב כיצד 3 + 4 עם do it אינו מדפיס דבר, כיצד print it מדגיש את התוצאה לצד הקוד, וכיצד ניתן לשלוח לעצם הנבדק ב-Inspector את ההודעה self squared!
self מקושר לעצם הנבדק!):
הגשר הנרטיבי: הרצנו ביטויים ובחנו עצמים – אבל איך מנווטים בין אלפי המחלקות והמתודות של המערכת?
בשפות כמו ++C או Java אנחנו מחפשים קוד בתוך קובצי טקסט במערכת הקבצים. אבל ב-Smalltalk אין קובצי טקסט חיצוניים — כל הקוד חי בזיכרון כמחלקות ומתודות!
בלשונית הבאה נכיר את כלי הפיתוח החשוב ביותר בסביבה: דפדפן המערכת (System Browser) על ארבע חלוניות הניווט שלו, נלמד 4 אסטרטגיות לחיפוש מחלקות, ונגלה את הקסם של Method Finder שמאפשר למצוא מתודה לפי דוגמה בלבד (כגון 4 . 16)!
דפדפן המערכת (System Browser), חיפוש מחלקות וחיפוש מתודות ב-Method Finder
הכרת המבנה האנטומי של ה-System Browser (4 חלוניות הניווט, בורר instance / ? / class ושורת כפתורי הפעולה), ארבע הדרכים לאיתור מחלקה, וחיפוש מתודות לפי שם או לפי דוגמה התנהגותית ב-Method Finder.
מודל מנטלי ועיקרון מנחה: סינון הדרגתי מן הכלל אל הפרט וחיפוש מתודות לפי התנהגות!
ארבע החלוניות העליונות של ה-System Browser פועלות כמו מיקוד של זכוכית מגדלת משמאל לימין: קטגוריה ⟵ מחלקה ⟵ פרוטוקול ⟵ מתודה. בכל צעד אנחנו מצמצמים את המיקוד עד שנגלה קוד המקור של המתודה למטה!
כאשר בוחרים מחלקה ב-System Browser אך לא בוחרים מתודה, החלונית התחתונה מציגה את תבנית הגדרת המחלקה — שהיא בעצמה ביטוי Smalltalk השולח הודעה למחלקת-העל (כגון Object subclass: #MyClass...)!
בכלי ה-Method Finder אינך חייב לזכור את שם המתודה! תוכל לחפש לפי דוגמה (התנהגות) ע"י הפרדה בנקודה: הקלדת 4 . 16 תגלה מיד ש-4 squared --> 16!
1. סעיף 4.7: דפדפן המערכת (System Browser) — כלי הפיתוח המרכזי
ארבע חלוניות הניווט העליונות, כפתורי בורר המצב (instance / ? / class), שורת כפתורי הפעולה וחלונית הקוד
בשפות תכנות כמו ++C או Java, כשאנחנו רוצים לקרוא או לערוך קוד, אנחנו מחפשים קובצי טקסט במערכת הקבצים. ב-Smalltalk אין קובצי טקסט חיצוניים — כל הקוד מאורגן כמחלקות ומתודות חיות בזיכרון המערכת.
הכלי המרכזי והחשוב ביותר בסביבה לבחינת מחלקות קיימות, להגדרת מחלקות חדשות ולעדכון מחלקות ומתודות נקרא דפדפן המערכת (System Browser).
ניתן לפתוח אותו מתפריט העולם (World -> Browser או open... -> class browser) או משורת התפריטים העליונה (Tools -> Browser).
🧭 ארבע חלוניות הניווט העליונות (משמאל לימין – מן הכלל אל הפרט)
חלונית הקטגוריות (Package / Category Pane)
מציגה רשימה של קטגוריות מערכת, כאשר כל קטגוריה מאגדת אוסף של מחלקות בעלות זיקה משותפת (לדוגמה: Kernel-Objects, Collections-Strings, Morphic-Basic).
חלונית המחלקות (Class Pane)
מציגה את רשימת המחלקות השייכות לקטגוריה שנבחרה בחלונית הראשונה (למשל בחירה ב-Kernel-Objects תציג את Object, Boolean ועוד).
חלונית הפרוטוקולים (Protocol / Message Category)
מציגה את קבוצות המתודות (הפרוטוקולים) של המחלקה שנבחרה. פרוטוקול הוא סיווג נושאי של מתודות הקשורות זו לזו (כגון: accessing, comparing, testing, converting, initialization או --all--).
חלונית המתודות (Method / Selector Pane)
מציגה את רשימת שמות המתודות (הסלקטורים) השייכות לפרוטוקול שנבחר (או את כלל המתודות של המחלקה אם נבחר --all--). בחירת מתודה מציגה את קוד המקור שלה למטה!
🎛️ כפתורי בורר המצב (מתחת לחלונית המחלקות)
instance: מצב ברירת המחדל, המיועד לצפייה ולעריכה של מתודות מופע (Instance Methods) ומשתני מופע.?(סימן שאלה): לחיצה עליו מציגה את תיעוד המחלקה (Class Comment) בחלונית המרכזית.class: מעבר לצפייה ולעריכה של מתודות מחלקה (Class Methods, המוגדרות במטה-מחלקה) ומשתני מחלקה.
📄 החלונית המרכזית/התחתונה ושורת הסטטוס
- כאשר לא נבחרה מתודה ספציפית: מוצגת תבנית הגדרת המחלקה — ביטוי Smalltalk המבוסס על שליחת הודעה למחלקת-העל (למשל:
Object subclass: #MyClass instanceVariableNames: '' ...). - כאשר נבחרת מתודה ספציפית: מוצג קוד המקור של אותה מתודה.
- שורת הסטטוס בתחתית החלון: מציגה את חותמת הזמן, שם המחבר שעדכן את המתודה, ומספר המממשים שלה.
🛠️ שורת כפתורי הפעולה (Action Bar) בין הפאנל העליון לתחתון
Ctrl+b).
.changes.
super ועוד).
2. סעיפים 4.8–4.9: ארבע דרכים לחיפוש מחלקות וחיפוש מתודות ב-Method Finder
איתור מהיר של מחלקות, וחיפוש מתודות לפי שם או לפי דוגמה התנהגותית (4 . 16)
📦 סעיף 4.8: ארבע דרכים לאיתור מחלקה ולהצגתה ב-System Browser
- ניווט ישיר דרך הקטגוריות: איתור ידני של הקטגוריה המתאימה בחלונית השמאלית ביותר ובחירת המחלקה מתוכה.
- שליחת ההודעה
browseבקוד: כתיבת שם המחלקה ב-Workspace ושליחת ההודעהbrowse— למשלBoolean browseוביצועdo it(Ctrl+d) יפתח ישירות חלון System Browser ממוקד במחלקהBoolean. לחלופין, ניתן לסמן את שם המחלקה בכל טקסט במערכת וללחוץ על מקש הקיצורCtrl+b. - איתור דרך עץ הירושה (
hierarchy): אם מחפשים תת-מחלקה של מחלקה ידועה, פותחים את המחלקה הידועה ולוחצים עלhierarchyכדי לפתוח את ה-Hierarchy Browser ולנווט אל תת-המחלקה. - חיפוש לפי שם באמצעות
find class... (f): פתיחת תפריט ההקשר (כפתור ימני / צהוב) בחלונית הקטגוריות של ה-System Browser ובחירה ב-find class...(או לחיצה על מקשf). הקלדת שם מדויק תטען את המחלקה ישירות; הקלדת שם חלקי תציג רשימת מחלקות תואמות לבחירה.
🪄 סעיף 4.9: חיפוש מתודות באמצעות Method Finder (Selector Browser)
נפתח מתפריט העולם (World -> open... -> method finder) או משורת התפריטים (Tools -> Method Finder), ומציע שתי דרכי חיפוש עוצמתיות:
time) בחלונית השמאלית העליונה ⟵ בחלונית שמתחתיה מתקבלת רשימת כל המתודות שהמחרוזת כלולה בשמן ⟵ בחירת מתודה מציגה בחלונית הימנית את כל המחלקות המממשות אותה ⟵ לחיצה על שם המחלקה תפתח אותה ב-System Browser ישירות על גבי המתודה!
.): עצם מקבל . ארגומנטים . תוצאה צפויה.
• הקלדת
4 . 16 ולחיצה על Enter תציג: 4 squared --> 16!
• הקלדת
10 . 2 . 5 תציג: 10 / 2 --> 5 ו-10 // 2 --> 5!
סינון 4 החלוניות (קטגוריה ⟵ מחלקה ⟵ פרוטוקול ⟵ מתודה) וחיפוש לפי התנהגות
מיני-סימולציה 4.3: סייר כפתורי הפעולה של ה-System Browser ו-4 דרכי חיפוש מחלקות
דפדפן המערכת החי (System Browser) ומעבדת החיפוש לפי דוגמה ב-Method Finder
🪄 מעבדת Method Finder: חיפוש לפי התנהגות או לפי שם!
נסה חיפוש לפי דוגמה (עצם מקבל, ארגומנטים ותוצאה מופרדים בנקודה .) או חיפוש לפי מחרוזת בשם המתודה:
הגשר הנרטיבי: למדנו לנווט ולמצוא כל מחלקה ומתודה ב-System Browser – עכשיו בוא נכתוב מתודה חדשה משלנו ונרחיב את השפה!
ב-Smalltalk אין חומה שמפרידה בין הקוד "של המערכת" לבין הקוד "שלך"! רוצים שכל מחרוזת במערכת (מופע של המחלקה המובנית String) תדע להגיב להודעה חדשה בשם shout ולהחזיר את עצמה באותיות גדולות עם סימן קריאה ('HELLO!')?
בלשונית הבאה נלמד צעד אחר צעד את תבנית המתודה (Method Template), ננתח לעומק כל תו בשורת הקוד ^ self asUppercase, '!', נשמור באמצעות accept (s) ונריץ!
להרחיב את שפת האם: הגדרת מתודה חדשה, תבנית המתודה והוספת shout ל-String
איך כותבים, מסווגים, מקמפלים ושומרים מתודה חדשה ב-System Browser: אנטומיית תבנית המתודה (Method Template), ניתוח הפקודה ^ self asUppercase, '!', המשולש הצהוב, שמירה ב-accept (s), ראשי תיבות ובדיקה ב-Workspace.
מודל מנטלי ועיקרון מנחה: אין הפרדה בין "קוד המערכת" לבין "הקוד שלך" — וחץ ה-Return (^) הוא קריטי!
בשפות רבות, מחלקת המחרוזות המובנית (String) היא "קופסה נעולה" שלא ניתן להוסיף לה מתודות. ב-Smalltalk כל המערכת פתוחה: ברגע שנוסיף למחלקה String את המתודה shout, כל מחרוזת בעולם תדע לצעוק!
מתודה ללא ^ (חץ למעלה) מחזירה כברירת מחדל את self (העצם המקורי)! כדי להחזיר את הערך המחושב החדש (כמו 'HELLO!'), חובה להציב ^ בתחילת משפט ההחזרה.
הפסיק (,) ב-Smalltalk אינו סתם סימן פיסוק תחבירי — הוא הודעה בינארית (Binary Message) המבצעת שרשור (Concatenation) של מחרוזות!
1. סעיף 4.10 א': תבנית המתודה (Method Template) ב-System Browser
ארבעת החלקים של הגדרת מתודה חדשה: כותרת (Method Pattern), הערה במירכאות כפולות, משתנים מקומיים בין קווים אנכיים ומשפטי הביצוע
הגענו לרגע המרגש ביותר בפרק שלנו: אנחנו הולכים לכתוב מתודה חדשה משלנו ולהטמיע אותה בזמן אמת בתוך המערכת החיה! כפי שלמדנו, ב-Smalltalk אין שום הפרדה בין הקוד "שלנו" לבין הקוד "של המערכת". איך מתחילים? ב-System Browser אנחנו מבצעים שלושה צעדים פשוטים:
- מאתרים ופותחים את המחלקה שאליה אנו רוצים להוסיף את המתודה.
- בוחרים את הפרוטוקול המתאים בחלונית הפרוטוקולים (למשל הפרוטוקול
convertingלהמרת נתונים). - מיד עם בחירת הפרוטוקול, בחלונית התחתונה תוצג תבנית מתודה (Method Template) המנחה אותנו במבנה הכתיבה:
"comment stating purpose of message"
| temporary variable names |
statements
בוא נפרק יחד את ארבעת הרכיבים של תבנית המתודה הזו:
תבנית המתודה (Method Pattern)
השורה הראשונה מגדירה את שם המתודה (ה-Selector שאליו היא תגיב) ואת שמות הפרמטרים שלה (שנפתחים באות קטנה).
הערת תיעוד (Comment)
נכתבת מוקפת במירכאות כפולות (" ") ומבהירה לקורא הקוד את מטרת המתודה ומשמעותה.
הצהרת משתנים מקומיים (זמניים)
שמות המשתנים המקומיים (הזמניים) של המתודה נרשמים תחומים בין שני קווים אנכיים (| |) ומתחילים באות קטנה.
החלק הביצועי (גוף המתודה והחזרת ערך ^)
משפטי הפעולה מופרדים בנקודות (.). החזרת ערך מתבצעת באמצעות החץ הפונה כלפי מעלה / כובע (^). זכור: מתודה ללא ^ מחזירה כברירת מחדל את self!
2. סעיף 4.10 ב': דוגמה מעשית מודרכת — הוספת המתודה shout למחלקה String
אנטומיה מלאה של שורת הקוד ^ self asUppercase, '!' ושמירה באמצעות accept (s)
בוא נגדיר יחד משימה מעשית: אנחנו רוצים שכל מחרוזת במערכת תוכל לקבל את ההודעה האונרית shout ("לצעוק"), ותחזיר בתגובה מחרוזת חדשה שבה כל האותיות הומרו לאותיות רישיות (גדולות) ובסופה מופיע סימן קריאה (!).
לשם כך אנו פותחים ב-System Browser את המחלקה String, בוחרים בפרוטוקול converting, ומקלידים בחלונית העריכה התחתונה את הקוד הבא במקום תבנית המתודה:
"Answer a String converted to Uppercase followed by an exclamation mark."
^ self asUppercase, '!'
🔬 אנטומיה של הפקודה: ניתוח כל רכיב בשורה ^ self asUppercase, '!'
משתנה-פסאודו (העצם המקבל)
מילה שמורה המאפשרת לעצם להתייחס אל עצמו — מצביעה על העצם הספציפי שקיבל את ההודעה shout (במקרה שלנו: המחרוזת עצמה).
הודעה אונרית (Unary Message)
ההודעה הראשונה (ללא פרמטרים) הנשלחת אל self. היא מחזירה עותק חדש של המחרוזת שבו כל האותיות הומרו לאותיות רישיות (גדולות).
הודעה בינארית לשרשור (פסיק)
הפסיק (,) הוא הודעה בינארית ב-Smalltalk המבצעת שרשור (Concatenation) של מחרוזות! הוא נשלח אל המחרוזת שחזרה מ-asUppercase ומחבר בסופה את הארגומנט '!'.
חץ למעלה — החזרת ערך מפורשת
מחזיר את תוצאת השרשור הסופית בתור הערך החוזר מהמתודה למי ששלח את ההודעה shout (ללא ^ היה מוחזר self המקורי!).
3. סעיף 4.10 ג': המשולש הצהוב, שמירה ב-accept (s), ראשי תיבות ובדיקה ב-Workspace
איך מקמפלים את המתודה לתוך המערכת החיה ומתעדים אותה בקובץ השינויים (.changes)
1. המשולש הצהוב בפינה
ברגע שמקלידים שינויים בחלונית העריכה, מופיע משולש צהוב בפינה הימנית העליונה של החלונית. הוא מסמן שישנם שינויים בטקסט שטרם נשמרו וטרם קומפלו למערכת!
2. שמירה והזנת ראשי תיבות (Initials)
שומרים ומקמפלים על ידי בחירה ב-accept (s) מתפריט ההקשר (או Ctrl+s). בשמירה הראשונה במערכת תופיע תיבת שיח המבקשת להזין את ראשי התיבות של המתכנת (למשל rm), הנרשמים עם חותמת הזמן לצד המתודה ובקובץ ה-.changes!
3. בדיקת המתודה ב-Workspace
פותחים חלון Workspace, מקלידים 'hello' shout, מסמנים ומבצעים print it (Ctrl+p). התוצאה המודפסת היא 'HELLO!' — המתודה זמינה כעת לכל המחרוזות במערכת!
אנטומיית השורה ^ self asUppercase, '!' ושלבי השמירה ב-accept (s)
מיני-סימולציה 4.4: מנתח רכיבי תבנית המתודה והפקודה shout
מעבדת פיתוח מתודה חיה: כתוב, קמפל ב-accept (s) ובדוק את shout ב-Workspace!
התנסה בתהליך המלא של הגדרת מתודה חדשה במחלקה String (בפרוטוקול converting): בדוק מה קורה כשיש משולש צהוב (לפני שמירה), מה קורה אם שוכחים את החץ ^, הזן את ראשי התיבות שלך ב-accept (s), והרץ 'hello' shout ב-Workspace!
"Answer a String converted to Uppercase followed by an exclamation mark."
^ self asUppercase, '!'
🧪 בדיקת המתודה shout בחלון ה-Workspace:
הקלד כל מחרוזת שתרצה, שלח אליה את ההודעה shout, ובצע print it (Ctrl+p):
'hello' shout לפני שלחצת על accept (s), ואז לחץ על accept (s) והרץ שוב!
הגשר הנרטיבי: השלמנו את כל סעיפי פרק 4 (4.1 עד 4.10) – בוא נסכם ונתרגל בכרטיסיות תלת-ממד!
כל הכבוד! למדת להתקין ולהפעיל את Squeak, לשלוט בשלושת כפתורי העכבר וב-Morphic Halo, להריץ קוד ב-Workspace וב-Transcript, לחקור עצמים ב-Inspector וב-Explorer, לנווט ולחפש ב-System Browser וב-Method Finder, ולהוסיף מתודה חדשה משלך (shout) למחלקה String!
בלשונית החמישית והאחרונה של הפרק מחכה לנו מפת סינתזה מלאה ומילון מושגים אינטראקטיבי בכרטיסיות תלת-ממד (3D Flashcards)!
מילון מושגים אינטראקטיבי וסיכום פרק 4 (הכרות עם סביבת העבודה Squeak)
אינטגרציה של כל עקרונות פרק 4 (סעיפים 4.1 עד 4.10), בוחן קיצורי מקלדת וכלים מהיר, ו-12 כרטיסיות תלת-ממד (3D Flashcards) לבחינה עצמית ולמידה.
מודל מנטלי ועיקרון מנחה: ארבעת המעגלים של עבודה חיה ב-Squeak
שלושת קובצי היסוד (.image, .sources, .changes), גיבוי לפני הפעלה, עכבר תלת-כפתורי (אדום, צהוב, כחול + Morphic Halo), תפריט העולם עם נעץ ו-save and quit.
הרצה ב-Workspace מול פלט ב-Transcript, הבחנה בין do it ל-print it (printString), שרשור הודעות ב-Cascade (;), צלילה לעצמים ב-Inspector/Explorer וטעינת חבילות ב-SqueakMap.
ניווט ב-4 חלוניות ה-System Browser, 4 דרכים לחיפוש מחלקות, חיפוש מתודות לפי שם או לפי דוגמה ב-Method Finder, והגדרת מתודה חדשה (shout) עם ^ ושמירה ב-accept (s).
מחזור החיים של מתכנת Smalltalk: מטעינת ה-image ועד כתיבת מתודה ובדיקתה
מיני-סימולציה 4.5: מרכז השליטה בקיצורי המקלדת והתחביר של פרק 4
כרטיסיות זיכרון תלת-ממדיות (3D Flashcards) לכל 12 מושגי פרק 4
לחץ על כל כרטיסייה כדי להפוך אותה ולבחון את עצמך על כל אחד מ-12 מושגי המפתח של פרק 4:
נחשפו: 0 / 12סיימנו במלואו את פרק 4! מה מחכה לנו בפרק 5?
עכשיו, כשאתה שולט בסביבת העבודה Squeak, יודע להריץ ביטויים ב-Workspace, לבחון עצמים ב-Inspector וב-Explorer, לנווט ב-System Browser ולהגדיר מתודות חדשות — אנחנו מוכנים לבנות תוכנית שלמה מאפס!
• ניצור מחלקה חדשה משלנו בשם
SBECell כיורשת של SimpleSwitchMorph.• נאתחל את התא במתודת
initialize ונבחן אותו בחי באמצעות ה-Inspector!