לקראת המעבר לשפות תכנות מונחה עצמים

האם ניתן ליהנות מכל העולמות?

הצעה למודל של קורס מבוא מרובה-מטרות בסביבה מונחית עצמים

הוכן ע"י ד"ר ברוריה הברמן וארנה מילר

החומרים שלפניכם הוכנו על ידי משתתפי סמינר קיץ למורים מובילים תשס"ד.

שימו לב: לא ניתן לעשות בחומר הזה כל שימוש מסחרי ללא רשות בכתב מראש מיוצרי החומרים.

 

ראשי פרקים:

1. מבוא: גישות שונות להוראת קורס יסודות במדעי המחשב, ומרכיבי קורסי יסוד במדעי-המחשב בגישת עצמים תחילה

2. הצעה למודל של קורס מבוא מרובה-מטרות בסביבה מונחית עצמים

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

- מבנה המודל המוצע לתכנון קורס מבוא בפרדיגמה מונחית עצמים – ארגון המרכיבים ושזירתם

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

1. חקר מקרה – בחינה מערכתית ועריכת שינויים בתוצר קיים

2. פיתוח מודרג של יישום מן היסוד

3. מטפורת טיפוסים מתפתחים (Evolving Types)

3. דיון

4. מקורות

 

1. מבוא

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

 

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

תוכנית הלימודים של ה- ACM,  ה-  (Computing Curricula 2001) CC2001 [1], מציעה שישה דגמים (מודלים) לבניית קורס יסוד במדעי-המחשב, אשר נוסו בפועל ובהצלחה במסגרות שונות. כל הדגמים כוללים גרעין רחב של נושאים משותפים, אחד מהם הוא פרדיגמת תכנות מונחה עצמים, ונושאים נוספים המשתנים מדגם אחד לשני. הבדל עקרוני נוסף ביניהם הוא הנושא הפותח.  כדאי לציין כי קורס יסוד מורכב משנים עד שלושה מודולים (יחידות לימוד) הנלמדים לאורך שניים או שלושה סמסטרים (בדומה ל-"יסודות מדעי המחשב" בתכנית הלימודים שלנו המורכב מיחידות הלימוד "יסודות 1" ו"יסודות 2"). כאשר מדובר בתוכנית לימודים של אחרי-תיכון, קורס יסוד כולל גם את מה שנלמד אצלנו ביחידת לימוד "עיצוב תוכנה" ותכנים נוספים.

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

ששת הדגמים המוצעים הם: "פרוצדורלי תחילה" (Imperative-first), "עצמים תחילה" (Objects- first), "פונקציונאלי תחילה" (Functional-first) , "מבט רוחבי" (Breadth-first), "אלגוריתמים תחילה", (Algorithms-first), ו-  "חומרה תחילה" (Hardware-first).

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

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

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

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

שלושת הדגמים הנוספים מקדימים ללימודי התיכנות נושאים תיאורטיים, במטרה להציג תמונה רחבה יותר של הדיסציפלינה ולחשוף את הסטודנטים לענפים שונים  של התחום. (ראוי לציין כי חיסרון הגישות של "תיכנות תחילה" הוא שהן יוצרות רושם מוטעה לפיו  "מדעי-המחשב = תיכנות".  מצד שני, החשש הוא שלימוד של נושאים תיאורטיים  בלבד ללא הרצת תוכניות במחשב עלול לפגוע במוטיבציה של תלמידים). הנושאים התיאורטיים המוצעים על ידי דגמים אלו כפתיח לקורס יסוד הם: הצגת נושאים במדעי-המחשב בשילוב עם נושאים במתמטיקה, אלגוריתמיקה ופתרון בעיות (כתיבת אלגוריתמים בפסיאודו-קוד בלבד ועל-כן צמצום ההתעסקות בפרטים סינטקטיים של שפה וסביבת תיכנות), או לימוד בשלבים  (bottom-up) של  מבנה המחשב החל ממרכיביו הפיסיים היסודיים ומנגנוני חישוב, כולל שפת סף.

 

מרכיבי קורסי יסוד במדעי-המחשב בגישת עצמים תחילה

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

 

ניתן לזהות חמישה מרכיבים עיקריים לקורסי יסוד במדעי-המחשב בגישת "עצמים תחילה":

(1) מושגים ועקרונות בסיסיים של הפרדיגמה מונחית העצמים,

(2) הכרות עם שפה וסביבת פיתוח מונחות עצמים,

(3) שימוש חוזר בקוד קיים,

(4) תיכנות פרוצדורלי "מסורתי",

(5) אלגוריתמיקה ופתרון בעיות.

התבוננות בספרי לימוד שונים של תיכנות מונחה עצמים לקורסי יסוד [4, 8] מראה, כי גם כאשר הם מכילים את רוב המרכיבים המתוארים, הטיפול בנושא של פתרון בעיות אלגוריתמיות (הנדרש לשם ניתוח בעיות ומימוש שיטות), תופס מקום מצומצם יותר בהשוואה לטיפול בו במסגרת גישת התיכנות ה"פרוצדורלי תחילה".

אמנם על-פי תפיסת התיכנות מונחה עצמים המושג המרכזי הוא העצם ולא האלגוריתם, יחד עם זאת נמצא שהטיפול הדל בפיתוח אלגוריתמים הופך את היכולת לתכנת משימות בסיסיות למכשול. לדוגמא, Duke ועמיתיו [3] דיווחו על קושי משמעותי של סטודנטים בקורס עצמים תחילה בכתיבת קטעי קוד לביצוע משימות בסיסיות. למשל, בפרויקט של כתיבת המשחק "ארבע בשורה", היתה המשימה של בדיקה האם התקבל ניצחון (היינו, האם שחקן הגיע לרצף של ארבעה כלים בטור, בשורה או באלכסון) הדורשת בדיקת קיום של תנאי לוגי מתאים, זו שעוררה את הקושי הרב ביותר. זאת, לעומת המשימות האחרות של תיכנון מערכת האובייקטים ובניית האלמנטים הגרפיים והממשק של המשחק איתם התמודדו הסטודנטים בהצלחה. כלומר, ניכר קושי מיוחד בהתמודדות עם פתרון בעיה אלגוריתמית וכתיבה של קוד.  דוגמא זו, כמו רבות אחרות, היא כפי הנראה הסיבה לכך שרבים מצדדים בגישה של "פרוצדורלי תחילה" [6], לפיה יש להביא תחילה את התלמידים לשליטה בפתרון בעיות אלגוריתמיות ותיכנותיות בסיסיות, ובהמרה של תיכון עילי לקוד ממשי.

 

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

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

 

2. הצעה למודל של קורס מבוא מרובה-מטרות בסביבה מונחית עצמים

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

 

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

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

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

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

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

כאשר ההתנסות בשימוש חוזר מתבצעת בראשית הלימוד, המטרה היא הסתכלות מערכתיתtop-down  על התיכנות בפרדיגמה.

ד. תיכנות "מסורתי" – לימוד מבני התיכנות הבסיסיים (ברוח יסודות התיכנות הפרוצדורלי) מבני תנאי וחזרה ומבני נתונים בסיסיים הנחוצים לשם מימוש שיטות.

ה. אלגוריתמיקה ופתרון בעיות - לימוד של אלגוריתמים בסיסיים ושימוש בהם לפתרון בעיות אלגוריתמיות לא מורכבות.

 

הוראת מרכיבים (4) ו- (5) נעשית בדרך כלל בשזירה, ונשאלת השאלה איזה מרכיב מקבל משקל גדול יותר, ומה משמש לאיזו מטרה: האם עוסקים בפתרון בעיות לשם תירגול השימוש במבני התיכנות, או שיסודות התיכנות נועדו ליישום של פתרונות אלגוריתמיים בשפת תיכנות?  

 

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

 

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

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

סוגי הפעילויות המוצעות הן:

*  חקר מקרה (case-study)  -  בחינה מערכתית של מערכת נתונה ועריכת שינויים בה.

*  פיתוח הדרגתי מן היסוד של יישום.

*  פיתוח יכולות של פתרון בעיות אלגוריתמיות בתוך סביבה מונחית עצמים, תוך שימוש במטפורת "טיפוסים מתפתחים" (להלן).

 

את חומרי הלימוד ניתן לארגן בספר מודפס או כספר אלקטרוני במתכונת hypertext.  החומר יתחלק למספר פרקי לימוד. הפרק הראשון יכלול עבודה עם עצמים במערכת נתונה בסביבת פיתוח פשוטה כדוגמת [5] BlueJ. בכל פרק נוסף ילמדו במשולב: (1) מושגים ועקרונות בתמ"ע, (2) תחביר שפת תמ"ע, (3) מבני תכנות בסיסיים (יסודות התכנות הפרוצדורלי), ו- (4) פתרון בעיות אלגוריתמיות.

למעשה, המודל בנוי מארבעה צירי התקדמות תוכניים המתבצעים במקביל לאורך פרקי הלימוד (החל מן הפרק השני). הסעיף האחרון בכל פרק יעסוק בפיתוח הדרגתי מן היסוד של יישום. בנוסף, תישזרנה בעיות חקר מקרה (case-study) שתעסוקנה בבחינת היבטים שונים של מערכות מוכנות ותחזוקתן. פיתוח יכולות של פתרון בעיות אלגוריתמיות בתוך סביבה מונחית עצמים, תוך שימוש במטפורת "טיפוסים מתפתחים" יעשה בכל פרק תוך טיפול במרכיבי ידע (4) ו- (5). בנוסף, יהיה קישור לבעיות אלגוריתמיות נוספות, מותאמות לתרגול מיומנויות של פתרון בעיות המתבקשות בכל פרק ופרק. הבעיות תהיינה מאורגנות על-פי סוגים (תבניות אלגוריתמיות), כך שלבעיה מסוג מסויים (למשל, חיפוש איבר בסדרה או מציאת ערך קיצון) תוצגנה כמה דוגמאות במגוון הקשרים ותוך העלאת היבטים שונים של פתרון סוג זה של בעיות [9].

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

ציור 2 מתאר את שלוש הפעילויות התומכות המתקדמות בשלושה צירים לאורך פרקי הלימוד. כיווני החיצים ממחישים את הרעיון ששתיים מהפעילויות עוסקות בבניה מן היסוד, והפעילות השלישית – מהשלם לחלקיו.

 

ציור 1. ארגון תכני של מרכיבי הקורס
פרק 1

עצמים תחילה – עבודה עם עצמים במערכת נתונה

 

 

 

פרק 2

מושגים ועקרונות בתמ"ע

 תחביר שפת תמ"ע

מבני תכנות בסיסיים

 פתרון בעיות אלגוריתמיות

פיתוח יישום חדש מן היסוד

בחינה ותחזוקה של תוצר קיים

 

 

 

פרק 3

מושגים ועקרונות בתמ"ע

 תחביר שפת תמ"ע

מבני תכנות בסיסיים

פתרון בעיות אלגוריתמיות

פיתוח יישום חדש מן היסוד

בחינה ותחזוקה של תוצר קיים

 

 

 

.

.

.

 

 

 

 

 

 

 

פרק N

מושגים ועקרונות בתמ"ע

 תחביר שפת תמ"ע

מבני תכנות בסיסיים

פתרון בעיות אלגוריתמיות

פיתוח יישום חדש מן היסוד

בחינה ותחזוקה של תוצר קיים

 

 

ציור 2. צירי התקדמות

 

הגישה הפדגוגית

 קווים מנחים

*  בחירת סביבת לימוד/הוראה פשוטה ככל האפשר שמדגישה את המאפיינים המרכזיים של גישה מונחית עצמים [5 ].

*  התחשבות בקשיים אפשריים של תלמידים בהבנת מושגי יסוד בתכנות מונחה עצמים, אשר אינם פשוטים ללימוד עבור תלמידים מתחילים [10].

*  שילוב של התנסות בעבודה עם עצמים בטרם יודעים "לכתוב מהיסוד" [4, 8].

*  הקניית ראייה מערכתית בצד שליטה בפרטים. מעבר מבוקר בין הטכניקות  zoom-in(דהיינו ירידה לפרטים) ו- zoom-out  (התבוננות מערכתית תוך התעלמות מפרטים).

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

 

היבטים פדגוגיים של הפעילויות התומכות

אחת המטרות של הקורס היא לפתח אצל הלומד תמונה כללית של הפרדיגמה מונחית עצמים. על-פי   Bergin שפיתח תבניות פדגוגיות להוראת מדעי המחשב [2], ראיה כללית כזו מושגת כאשר מושגות המטרות הבאות:

  • הבנת מושגים ועקרונות של הדיסציפלינה: חשוב שתלמידים יקבלו תמונה כללית הוליסטית של נושא מסוים בצד הבנת המאפיינים של מושגים/עקרונות/רעיונות בודדים, ולא "ילכו לאיבוד" בים של פרטים. בהתאם, יש לארגן את הלמידה במטרה לפתח בתבונה אצל הלומד את שתי נקודות המבט- ההוליסטית בצד הפרטנית.
  • הבנה ופיתוח של מערכות תוכנה: חשוב לפתח אצל התלמידים הבנה של אופן פעולתן של מערכות תוכנה ותהליכי פיתוחן, בצד היכולת לפתח באופן עצמאי אלגוריתמים ומערכות תכנה. לדעת Bergin קיים פער בין היכולת לפתח תוצר מורכב לבין היכולת להבין אותו- קל יותר להבין מבנה של מערכת קיימת מאשר לפתח אותה מן היסוד. אירגון הלמידה צריך לכוון, אם כן, לפיתוח  יכולות "קריאה"  בצד יכולות "כתיבה".

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

דרושה ראיה מלמעלה של החומר שעתיד להילמד: ארגון הלמידה בקורס צריך להיות כך שהמושגים ה/רעיונות/העקרונות החשובים יילמדו/יוצגו תחילה או כמה שיותר מוקדם (תבנית פדגוגית - Early Bird), ותתקבל ראיה מלמעלה של החומר העתיד להילמד.

 

1. חקר מקרה – בחינה מערכתית ועריכת שינויים בתוצר קיים

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

 

המשימות המוצגות לתלמידים עשויות להיות:

*  עבודה עם מערכת נתונה - על פי המודל המוצע כאן, אחד הפרקים הראשונים יכלול התנסות בעבודה עם עצמים, עוד בטרם למדו התלמידים לכתוב מחלקות בעצמם. מתוך הפעילות יוכלו התלמידים להתרשם אודות עקרונות בסיסיים של תיכנות מונחה עצמים, למשל [7]: מרכיבי התוכנית מיוצגים על- ידי מחלקות, עצמים נוצרים ממחלקות, ניתן ליצור עצמים רבים ממחלקה אחת- לכולם אותו מבנה, עצמים שונים מאותו טיפוס עשויים להיות במצבים (states) שונים, ניתן להפעיל על עצם פעולות המוגדרות עליו, ועוד.

*  בחינה והערכה של תוצר מורכב -  ההערכה כוללת איתור חסרונות ובעיות. נותן מושג על מהות תוצרים בהם עוסקים בעולם האמיתי (תבנית פדגוגית - Lay of the Land).

*  איתור ותיקון תקלות/שגיאות/בעיות פשוטות בתוצר גדול מוכן מראש. בדרך זו התלמיד עובד על מערכת מורכבת קיימת ולומד לבדוק אותה, לשפץ ולשפר אותה (תבנית פדגוגית - Fixer Upper). שינוי מערכת קיימת והתאמתה לדרישות חדשות (תבנית פדגוגית - Larger than Life).

*  השלמת החסר (תבנית פדגוגית - Fill in the Blanks): בניית מרכיבים קטנים של תוצר קיים אך לא שלם. למידה על ידי קריאה בצד פיתוח חלקי קוד מצומצמים.

 

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

 

2. פיתוח מודרג של יישום מן היסוד

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

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

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

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

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

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

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

(הערה: הדוגמה עשויה לשמש דגם למטלות תיכנותיות נוספות של בניית מערכות לפתרון בעיות דומות).

 

3. מטפורת טיפוסים מתפתחים (Evolving Types)

Bergin [2] ממליץ על שימוש במטפורה להצגת נושא מורכב במטרה לאפשר לתלמידים לראות את "התמונה הגדולה" מבלי ללכת לאיבוד ב"ים הפרטים" (תבנית פדגוגית - Consistent Metaphor). לדעתו, אחת הגישות להוראה משמעותית של עצמים מבוססת על שימוש במטפורה של דמויות אנושיות – כל עצם במערכת מומחש באמצעות דמות אנושית. הצדקתו לבחירת מטפורה זו היא הדמיון בין אנשים ועצמים כשחקנים אוטונומיים המתקשרים ביניהם.

 

בהקשר של הקניית כלים ופיתוח יכולות פתרון בעיות אלגוריתמיות, אנו ממליצים להשתמש במטפורה הלקוחה מעולם האבולוציה – הצגת עולם של טיפוסים מתפתחים. טיפוס יכול להיות טיפוס מופשט שאינו קשור ל"סיפור" זה או אחר, או לצורך המחשה טיפוס המתייחס ל"סיפור" אשר מייצג משפחת בעיות.

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

 

שלב א' – הצגת טיפוסים עצמאיים ללא התייחסות "תיכנותית" לקשרי הורשה או הרכבה

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

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

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

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

 

דוגמא – מציאת ערך קיצון:

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

 

טיפוס:  זוג מספרים חיוביים

            מאפיינים: מספר1, מספר2  {שני המספרים חיוביים}

            שיטות: סכום, הגדול מבין השניים

טיפוס:  שלשה של מספרים חיוביים

            מאפיינים: מספר1, מספר2, מספר3 {שלושת המספרים חיוביים}

שיטות: סכום, הגדול מבין השלושה

טיפוס:  סדרת מספרים חיוביים

            מאפיינים: סדרת מספרים חיוביים {כל המספרים בסדרה חיוביים}

שיטות: סכום, מקסימלי בסדרה

טיפוס:  סדרת מספרים שליליים

            מאפיינים: סדרת מספרים שליליים {כל המספרים בסדרה שליליים}

שיטות: סכום, מקסימלי בסדרה

 

שלב ב' – הצגת קשרים בין טיפוסים

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

 

3. דיון

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

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

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

הדגש הנוסף של המודל המוצע הוא הניסיון להקנות ראייה מערכתית כללית במשולב עם ראייה מונחית משימות אלגוריתמיות. הלימוד כולל במקביל פעילויות בגישה של התפתחות  Bottom-up (רכישת הדרגתית של כלים, החל מן בסיסיים ביותר, כפי שנעשה בתוכנית הקיימת), בתוספת של פעילויות בגישה של Top-down (הסתכלות התחלתית על התמונה כולה, ולימוד הדרגתי של מערכת תוך פירוקה וירידה לפרטים).  ראיה מערכתית ניתנת להשגה מתוך הוספה של קריאה לכתיבה, באמצעות בחינה של תוכנות מוכנות, שהן מורכבות יותר מאלו שתלמיד אמור לדעת לבנות בעצמו בשלב זה של הלימוד. שימוש בשלושת סוגי הפעילויות התומכות שהוצגו במודל: (1) חקר מקרה (case-study) - בחינה מערכתית ועריכת שינויים של מערכת נתונה; (2) פיתוח הדרגתי מן היסוד של יישום; (3) פיתוח יכולות של פתרון בעיות אלגוריתמיות בתוך סביבה מונחית עצמים, תוך שימוש במטפורת "טיפוסים מתפתחים", עשויות לעזור בארגון הלמידה ובהבניית ידע של תלמיד.

 

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

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

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

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

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

 

מקורות

[1] ACM/IEEE Joint Task Force on Computing Curricula, Final Report, December 2001.

[2] Bergin, J. Fourteen Pedagogical Patterns. http://csis.pace.edu/~bergin/PedPat1.3.html.

[3] Burton, P.J. & Bruhn, R.E. Teaching Programming in the OOP Era. SIGCSE Bulletin, 35(2), 2003.

[4] Deitel, H. M. & Deitel, P.J.  Java How to Program, 4th Ed., Prentice Hall, 2002.

[5] Duke, R., Salzman, E., Burmeister, J., Poon, J., & Murray, L. Teaching programming to beginners – choosing the language is just the first step. ACE 2000, Melbourne, Australia, 2000

[6] Hu, C. (2004), Rethinking of Teaching Objects-First, Education and Information Technologies 9(3), 209-218, 2004.

[7] Kolling, M. & Rosenberg, J. Guidelines for teaching object orientation with Java, in Proc. ITiCSE’01 Canterbury, UK, 2001.

[8] Lewis, J. & Loftus, W. Java Software Solutions Foundations of Program Design, 2nd Ed. Addison-Wesley, 2000.

[9] Muller, O., Haberman, B., & Averbuch, H., (An almost) Pedagogical Pattern for Pattern-Based Problem-Solving Instruction. Proceedings of the 9th annual SIGCSE Conference on Innovation and Technology in Computer Science Education (ITiCSE), 2004. 

[10] Ragonis, N. & Ben-Ari, M. (2004). A Long-Term Investigation of the Comprehension of OOP Concepts by Novices. Accepted to publication at the Journal of Computer Science Education (CSE).

 

חזרה לעמוד הראשי