Smalltalk

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Smalltalk
פרדיגמות תכנות מונחה-עצמים
מתכנן אלן קיי, דן אינגולס, טד קלר, אדל גולדברג ואחרים
גרסה אחרונה Smalltalk-80 גרסה 2 (1980)
טיפוסיות דינמית, חזקה
מימושים Pharo, Squeak, GNU Smalltalk, VisualWorks, Dolphin Smalltalk, Smalltalk/X, VA Smalltalk
הושפעה על ידי Simula, Lisp, Logo, Sketchpad
השפיעה על Objective-C, Self, Java, PHP 5, Logtalk, Dylan, AppleScript, Lisaac, NewtonScript, Python,

Ruby, Groovy, Scala, Perl 6, CLOS, Falcon, Io, Ioke, Fancy, Dart

סיומת st.

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

תוכנות בסמולטוק על פי רוב עוברות הידור ל-Bytecode, מעין שפת-מכונה-אבסטרקטית, המפורשת בזמן-ריצה על ידי מכונה וירטואלית. מגנון זה נקרא "הידור Just-In-Time" ‏(JIT), והוא נפוץ בשפות מודרניות רבות (כגון ג'אווה ו-#C).

היסטוריה[עריכת קוד מקור | עריכה]

סמולטוק פותחה במהלך שנות השבעים, כחלק מעבודה של צוות ב-Xerox PARC. חלק מיעודה המקורי של סמולטוק היה כשפה ללימוד תכנות, ומכאן ככל הנראה מקור שמה הלא יומרני. סמולטוק הושפעה רבות מהחידושים המהפכניים שבאו לעולם לראשונה בתוכנה Sketchpad ובשפת התכנות Simula, ומאפיינים רבים של השפה הם המשך ישיר למאפיינים המצויים בהן. הגרסה הפופולרית הראשונה של השפה נקראה Smalltalk-80, והיא קנתה לה קהילה של משתמשים הממשיכים לפתח אותה באופן פעיל גם בימים אלה.

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

תכנות מונחה עצמים[עריכת קוד מקור | עריכה]

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

אובייקט בסמולטוק יכול לבצע בדיוק שלושה דברים:

  1. להחזיק מצב (אוסף של התייחסויות לאובייקטים אחרים - "שדות" או "משתני מופע").
  2. לקבל הודעה מאובייקט אחר.
  3. במהלך עיבוד של הודעה, לשלוח הודעה לאובייקט אחר.

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

סמולטוק היא שפת תכנות מונחית-עצמים "טהורה". משמעות הדבר היא כי, בניגוד לשפת ג'אווה או ++C, אין כל הבדל בין ערכים שהם אובייקטים לבין ערכים שהם טיפוסים פרימיטיביים, בסיסיים. בסמולטוק, ערכים פרימיטיביים כגון מספרים שלמים, ערכי-אמת או תווים, גם הם אובייקטים, במובן שהם מופעים (Instance) של מחלקות מתאימות, ופעולות עליהם מבוצעות באמצעות שליחה של הודעות. מתכנת יכול לשנות את המחלקות שמממשות את הערכים הפרימיטיביים, כך שתוגדר התנהגות חדשה עבור מופעים שלהן. למשל, על מנת לממש מבנה בקרת-זרימה או לשנות את התנהגותם של המבנים הקיימים (בסמולטוק גם פקודות תנאי או לולאות ממומשות כאובייקטים). נפוץ לסכם עובדה זאת במשפט "בסמולטוק כל דבר הוא אובייקט", אם כי מדויק יותר לומר כי כל הערכים הם אובייקטים.

כיוון שכל ערך הוא אובייקט, מחלקות גם הן אובייקטים, והן מופעים של מטה-מחלקות. מטה-מחלקות גם הן אובייקטים, והן מופע של המחלקה Metaclass. בלוקים של פקודות וביטויים גם הם אובייקטים.

קישורים חיצוניים[עריכת קוד מקור | עריכה]