יחידת עיצוב תכנה המחודשת

Download Report

Transcript יחידת עיצוב תכנה המחודשת

‫יום עיון‬
‫עיצוב תוכנה מבוסס עצמים‬
‫מרכז המורים הארצי‬
‫המרכז להוראת המדעים‬
‫האוניברסיטה העברית ירושלים‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪1‬‬
‫מתוך הגדרת הפרויקט של מל"מ‬
‫‪...‬לפתח גירסה של היחידה הרביעית המתבססת על שפה מונחת‬
‫אובייקטים‪ ,‬במקום על שפה אימפרטיבית כפסקל או כ‪.C-‬‬
‫מושגי האובייקט והמחלקה מהוים תשתית טובה לרעיון ההפשטה‬
‫ולשאר התכנים של היחידה הרביעית‪.‬‬
‫השימוש בהפניות (‪ )reference‬לבניית טיפוסי נתונים כרשימות‬
‫ועצים‪ ,‬חוסך ועוקף את העיסוק במצביעים‪ ,‬והוא קל יותר להבנה‪...‬‬
‫אנו מעריכים כי ביסוס היחידה הרביעית על שפה מונחית עצמים‬
‫יאפשר לעסוק בתכני היחידה באופן מקיף‪...‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪2‬‬
‫מתוך הגדרת הפרויקט של מל"מ‬
‫‪...‬התכנים והרעיונות הקיימים [בפרקים] ‪ ...‬יבואו לידי ביטוי כנדרש‬
‫על ידי הפרדיגמה המתקדמת‪ .‬הצגת הדברים ברוח ‪ OOP‬היא שונה‬
‫ומתקדמת יותר‪ ,‬הקוד ושימושיו יוחלפו‪ ,‬דרכי מידול ותרגול יותאמו‬
‫כנדרש‪ .‬רעיונות בסיס תיאורטיים ישארו‪...‬‬
‫בנוסף – הזדמנות יחודית של פתיחת היחידה מחדש‬
‫תיקון טעויות – קשיים – מחלוקות שנתגלו במהלך השנים‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪3‬‬
‫תמונת מצב עדכנית‬
‫• הסתיימה שנת פעילות ראשונה‬
‫• ניסוי בשטח וניסוי מקביל בהשתלמות מורים‬
‫• כל פרסום הוא תוצאה של חשיבה‪ ,‬דיונים‪,‬‬
‫התלבטויות והמלצות‬
‫• אין כרגע אמירות סגורות ומוחלטות‬
‫• יש משמעות גדולה לדבריהם של מורים מוסמכים‬
‫המנמקים ומצדיקים בקשות והמלצות‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪4‬‬
‫צוות הפיתוח‬
‫• קיבל מנדט (ותקציב) לתקופה מוגבלת ולמטרה‬
‫מוגדרת היטב‬
‫• תקציב מל"מ – מוגבל לתקופת פיתוח‬
‫לא כולל תקופת ליווי והטמעה‬
‫• הצוות ‪ -‬כולל אנשי מקצוע‪ ,‬תמיכה טכנית‬
‫מורה מוסמך מן השטח‬
‫‪,‬‬
‫• קשוב למורים מן השטח (פורום‪ ,‬השתלמויות)‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪5‬‬
‫שתי שפות מקבילות‬
‫• היחידה נכתבת במקביל ב‪ Java-‬וב‪C#-‬‬
‫• על פי הוראת הפיקוח ילמד ויבחן המכנה‬
‫המשותף של השפות‬
‫• ברמה הנדרשת לצרכי היחידות – השפות שוות ערך‬
‫וכל הזמן משלימות את ההישגים זו של זו‬
‫• הבחירה תעשה על ידי המורה (שיקולים פנימיים)‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪6‬‬
‫הנחות בסיס בעבודת הצוות‬
‫• חובת שיתוף הפעולה בין כל הגורמים‬
‫• בפרט‪ ,‬בין צוות יסודות וצוות עיצוב תוכנה‬
‫• שיתוף פעולה ותיאום עם הפיקוח‬
‫• הוצאת מסמכי תיאום שונים‬
‫• כל ההחלטות הסופיות‪:‬‬
‫מבנה הממשקים הסופי‬
‫מבנה הבגרות ‪...‬‬
‫יפורסמו על ידי הפיקוח על מדעי המחשב‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪7‬‬
‫החיבור בין יחידות הלימוד‬
‫הנחת המוצא‬
‫‪:‬‬
‫יש וחייב להיות רצף בין היחידות החל מהיסודות‬
‫ועד עיצוב והרחבה בתכנות מונחה עצמים (יחידה‬
‫חמישית)‬
‫כדי להבין את הרצף והקישור‬
‫נתחיל מסקירת תוכן היחידה הרביעית‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪8‬‬
‫תוכן העניינים – יחידה רביעית‬
‫הדגשה והערה‪ :‬כאמור אין התחייבות שאלו התכנים הסופיים‬
‫הפרקים‬
‫‪ .1‬מבוא‬
‫‪ .8‬יעילות‬
‫‪[ .2‬עוברים שפה]‬
‫‪ .9‬מחסנית‬
‫‪ .3‬עצמים‬
‫‪ .10‬רשימה‬
‫‪ .4‬מחלקות‬
‫‪ .11‬עץ בינרי‬
‫‪ .5‬עצמים והפניות‬
‫‪ .12‬שילוב והרכבה של מבני נתונים‬
‫[השלמות מתוך פרק ‪ 5‬יחידה ‪ = 5‬צפונות ה‪Main-‬‬
‫‪ .6‬מבני נתונים‬
‫‪ .7‬רקורסיה‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪9‬‬
‫סקירת שינויים‬
‫הקדמה‬
‫• אשתדל לדבר באופן שיובן על ידי כלל השומעים‬
‫• נושאים תלויי שפה או ידיעת הפרדיגמה –‬
‫אשתדל להבהיר כמידת יכולתי‬
‫• התייחסות לקוד תעשה באופן שווה כמעט בין‬
‫שתי השפות‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪10‬‬
‫סקירת שינויים‬
‫מה לא ישתנה‬
‫• פרק הרקורסיה (מתי ילמד?)‬
‫• פרק יעילות‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪11‬‬
‫סקירת שינויים‬
‫ממשקים א‪1 -‬‬
‫הנאמר להלן הוא בגדר המלצה בלבד!!‬
‫• המושג ממשק הוא חלק מהשפה והוא אופן העבודה‬
‫התקני עם טיפוסי נתונים = מחלקות‬
‫• שתי עמודות‪:‬‬
‫‪ .1‬שם הפעולה כולל ערך החזרה ורשימת הפרמטרים‬
‫שהיא מקבלת‬
‫‪ .2‬תיאור הפעולה כולל הנחות (חוזה)‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪12‬‬
‫סקירת שינויים‬
‫ממשקים א‪2 -‬‬
‫• הורדת המושג ממשק עברי‬
‫• מקורב מאד לאופן הצגת הממשקים בתוך‬
‫השפות עצמן‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪13‬‬
‫ממשק המחסנית‬
‫(‪)C#‬‬
‫ממשקים א‪3-‬‬
‫פעולה בונה היוצרת מחסנית ריקה‬
‫)(‪Stack‬‬
‫מחזירה 'אמת' אם המחסנית הנוכחית ריקה‪,‬‬
‫ו'שקר' אחרת‬
‫)(‪bool IsEmpty‬‬
‫מכניסה את הערך ‪ x‬לראש המחסנית הנוכחית‬
‫‪void Push‬‬
‫)‪(<info_type> x‬‬
‫מוציאה את הערך שבראש המחסנית הנוכחית‬
‫ומחזירה אותו‪.‬‬
‫הנחה‪ :‬המחסנית הנוכחית לא ריקה‬
‫)(‪<info_type> Pop‬‬
‫מחזירה את הערך שבראש המחסנית הנוכחית‬
‫מבלי להוציאו‪.‬‬
‫הנחה‪ :‬המחסנית הנוכחית לא ריקה‬
‫)(‪<info_type> Top‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪14‬‬
‫המחסנית של ‪C#‬‬
‫(מתוך ה‪)MSDN-‬‬
‫ממשקים א‪4-‬‬
‫ממשקים‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪15‬‬
‫המחסנית של ג'אווה‬
‫(מתוך ‪ )Java API‬ממשקים א‪5-‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪16‬‬
‫ממשק הרשימה (ג'אווה)‬
‫ממשקים א‪6-‬‬
‫ממשק החוליה‬
‫פעולה בונה של החוליה‪ .‬הערך של‬
‫החוליה הוא ‪ ,x‬והעוקב שלה הוא‬
‫‪null‬‬
‫פעולה בונה של החוליה‪ .‬הערך של‬
‫החוליה הוא ‪x‬‬
‫והעוקב שלה הוא החוליה ‪p‬‬
‫הפעולה מחזירה את הערך של החוליה‬
‫)‪Node (<info_type> x‬‬
‫)‪Node (<info_type> x, Node p‬‬
‫)(‪<info_type> getInfo‬‬
‫הפעולה מחזירה את העוקב של החוליה‪.‬‬
‫אם אין לחוליה עוקב‪ ,‬הפעולה‬
‫‪null‬תחזיר‬
‫)(‪Node getNext‬‬
‫הפעולה משנה את ערך החוליה להיות ‪x‬‬
‫)‪void setInfo (<info_type> x‬‬
‫הפעולה משנה את עוקב החוליה להיות‬
‫‪p‬‬
‫)‪void setNext (Node p‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪17‬‬
‫ממשק הרשימה (ג'אווה)‬
‫ממשקים א‪7-‬‬
‫ממשק חלקי של הרשימה‬
‫פעולה בונה היוצרת רשימה ריקה‬
‫)(‪List‬‬
‫מחזירה את המקום של החוליה הראשונה‬
‫ברשימה הנוכחית‪ .‬אם הרשימה ריקה‪ ,‬הפעולה‬
‫תחזיר ‪null‬‬
‫)(‪Node getFirst‬‬
‫מכניסה לרשימה הנוכחית את האיבר ‪ x‬מקום‬
‫אחד אחרי המקום ‪ .p‬הפעולה מחזירה את‬
‫המקום של החוליה החדשה שהוכנסה‪.‬‬
‫על מנת להכניס חוליה ראשונה יש לשלוח ‪null‬‬
‫כפרמטר המקום‪.‬‬
‫הנחה‪ p :‬הוא מקום קיים ברשימה הנוכחית‬
‫>‪Node insert (Node p, <info_type‬‬
‫)‪x‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪18‬‬
‫ממשק עצים‬
‫ממשקים א‪8-‬‬
‫• נמצא בדפים שלפניכם‬
‫• השינוי המשמעותי – אין עץ ריק – הוסבר בהרצאתה של יעל‬
‫• מעבר לכך הדברים נשארו כמעט כפי שהיו‬
‫• בהשתלמויות ובמאמרים ניתן יהיה לרדת לעומקם של דברים‬
‫• וכאמור – ההחלטה הסופית תפורסם על ידי הפיקוח ובאישורו‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪19‬‬
‫סקירת שינויים‬
‫אלגוריתמיקה‬
‫‪1‬‬
‫הנאמר להלן הוא בגדר המלצה בלבד!!‬
‫• הכתיבה האלגוריתמית המפורטת – הטייה חזקה של‬
‫שנות התשעים‬
‫• אופן הכתיבה הקיים – משקף התנסחות פרוצדורלית‬
‫• אין צורך ברמת פירוט כל כך גבוהה בשלב תכנות מתקדם‬
‫שכזה‪ .‬מספיק שהאלגוריתם ישקף כיוון פעולה‪.‬‬
‫• עם ביטול שמות הפעולה העבריים – רישום אלגוריתם‬
‫מפורט יראה ממש כמו כתיבת הקוד‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪20‬‬
‫אלגוריתם מעיצוב תוכנה "הישן"‬
‫אלגוריתמיקה ‪2‬‬
‫הדפס‪-‬רשימה (‪)L‬‬
‫{ האלגוריתם מדפיס את איברי הרשימה ‪ L‬לפי הסדר‪.‬‬
‫‪ q‬הוא מקום ברשימה‪ x .‬הוא איבר ברשימה‪} .‬‬
‫(‪ )1‬עוגן‪-‬רשימה ‪.q )L(‬‬
‫(‪ )2‬עוקב‪-‬ברשימה ‪.q )L, q(‬‬
‫{ ‪ q‬הוא המקום הראשון ברשימה‪} .‬‬
‫(‪ )3‬כל עוד ‪ >< q‬סוף‪-‬רשימה (‪ ,)L‬בצע‪:‬‬
‫(‪ )3.1‬אחזר‪-‬מרשימה (‪.x  )L, q‬‬
‫(‪ )3.2‬הדפס את ‪.x‬‬
‫(‪ )3.3‬עוקב‪-‬ברשימה (‪.q  )L, q‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪21‬‬
‫אלגוריתם בעיצוב החדש‬
‫אלגוריתמיקה ‪3‬‬
‫(פעולה חיצונית)‬
‫הדפס‪-‬רשימה (‪)lst‬‬
‫{ טענת כניסה‪ :‬הפעולה מקבלת את הרשימה ‪ lst‬כפרמטר}‬
‫{ טענת יציאה‪ :‬הפעולה מחזירה הדפסה של איברי הרשימה לפי הסדר }‬
‫עבור על חוליות הרשימה ‪ lst‬מתחילתה ועד סופה‬
‫הדפס את ערך כל אחת מהחוליות‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪22‬‬
‫אלגוריתמיקה ‪4‬‬
‫דוגמה לפעולה פנימית (מרחיבה את אוסף פעולות הטיפוס)‬
‫אחזר מקום (‪)x‬‬
‫{טענת כניסה‪ :‬הפעולה מקבלת מספר שלם ‪ x‬ופועלת על הרשימה הנוכחית}‬
‫{טענת יציאה‪ :‬הפעולה מחזירה את המקום הראשון של ‪ x‬ברשימה הנוכחית‬
‫אם ‪ x‬מופיע‪ ,‬אחרת מחזירה ‪}null‬‬
‫עבור על חוליות הרשימה הנוכחית מתחילתה‬
‫אם ערך החוליה ברשימה הנוכחית שווה ל‪ ,x-‬החזר את מקומה‪.‬‬
‫אם הגעת לסוף הרשימה‪ ,‬החזר‬
‫‪.null‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪23‬‬
‫אלגוריתמיקה ‪5‬‬
‫דוגמה לפעולה חיצונית המקבלת את העצם כפרמטר‬
‫ופועלת עליו‬
‫בטל ‪ -‬כל ‪ -‬המופעים (‪)lst, x‬‬
‫{טענת כניסה‪ :‬הפעולה מקבלת מספר שלם ‪ x‬ורשימה ‪}lst‬‬
‫{טענת יציאה‪ :‬הפעולה מוחקת מהרשימה ‪ lst‬את כל החוליות שערכן ‪} x‬‬
‫עבור על חוליות הרשימה ‪ lst‬מתחילתה ועד סופה‬
‫אם ערך החוליה הנוכחית שווה ל‪ ,x-‬הוצא אותה מהרשימה‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪24‬‬
‫סקירת שינויים‬
‫אלגוריתמיקה ‪6‬‬
‫• אין הורדה בחשיבות ערכו של אלגוריתם‬
‫• מורידים את השפה הפורמלית הנוספת הנדרשת לניסוח‬
‫אלגוריתמים מדויקים‬
‫ההמלצות שלנו בשלב זה‪:‬‬
‫אלגוריתם – יסרטט את כיוון הפתרון אבל לא במדויק‬
‫לא לבקש מתלמיד לכתוב אלגוריתם בזמן מבחן‬
‫הבגרות ‪ -‬אבל בהחלט עליו להוכיח יכולת קריאה‬
‫והבנה של אלגוריתמים‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪25‬‬
‫מה גודלו של ממשק?‬
‫•‬
‫ממשקים ב‪1-‬‬
‫ממשק צריך להיות מינימלי ומספק‬
‫• לפעמים כדאי לצורך אפליקציה מסוימת ואפילו לצורך תרגול "סתם"‬
‫להוסיף פעולות נוספות לממשק‬
‫• הפתרון ברמת ההפשטה שקיימת ביחידת הלימוד הנוכחית‪:‬‬
‫מכיון שאנחנו הכותבים של המחלקה – להוסיף פעולות בממשק‬
‫(הפרדה)‬
‫• הפתרון הזה לא טוב כאשר רוצים לעשות זאת לגבי מחלקה סגורה‬
‫שלא אנחנו כתבנו‬
‫• הפתרון האמיתי צריך להעזר בירושה וממשקים (‪)Interface‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪26‬‬
‫תוספת פעולות למבנה נתונים‬
‫ממשקים ב‪2-‬‬
‫פעולות פנימיות‬
‫פעולה פנימית – חלק מממשק המחלקה‬
‫פועלת על העצם הנוכחי‬
‫יכולה לפנות ישירות למימוש של המחלקה‬
‫דוגמה‪:‬‬
‫החזר אורך רשימה ()‬
‫{טענת כניסה‪ :‬הפעולה מחשבת את אורכה של הרשימה הנוכחית }‬
‫{טענת יציאה‪ :‬הפעולה מחזירה את מספר האיברים ברשימה}‬
‫עבור על הרשימה הנוכחית מתחילתה ועד סופה‬
‫החזר את מספר צעדי המעבר מחוליה לחוליה שבוצעו‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪27‬‬
‫תוספת פעולות למבנה נתונים‬
‫ממשקים ב‪3-‬‬
‫)( ‪public int getLength‬‬
‫{‬
‫;‪int len = 0‬‬
‫;‪Node p = this. head‬‬
‫{)‪while ( p!=null‬‬
‫;‪len++‬‬
‫;)(‪p = p.getNext‬‬
‫}‬
‫;‪return len‬‬
‫}‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪28‬‬
‫תוספת פעולות למבנה נתונים‬
‫ממשקים ב‪4-‬‬
‫פעולות חיצוניות‬
‫פעולה חיצונית – מקבלת את העצם כפרמטר ופועלת עליו‬
‫דומה באופן החשיבה והכתיבה לפעולה פרוצדורלית‬
‫מחויבת להשתמש בממשק המחלקה בלבד‬
‫דוגמה‪:‬‬
‫החזר אורך רשימה (‪)lst‬‬
‫{טענת כניסה‪ :‬הפרמטר הוא רשימה }‬
‫{טענת יציאה‪ :‬הפעולה מחזירה את מספר האיברים ברשימה}‬
‫עבור על הרשימה מתחילתה ועד סופה‬
‫החזר את מספר צעדי המעבר מחוליה לחוליה שבוצעו‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪29‬‬
‫תוספת פעולות למבנה נתונים‬
‫ממשקים ב‪5-‬‬
‫)‪public static int getLength (List ls‬‬
‫{‬
‫;‪int len = 0‬‬
‫;)(‪Node p = ls.getFirst‬‬
‫{ )‪while ( p!=null‬‬
‫;‪len++‬‬
‫;)(‪p = p.getNext‬‬
‫}‬
‫;‪return len‬‬
‫}‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪30‬‬
‫סקירת שינויים‬
‫גנריות‬
‫הדיון ‪1‬‬
‫הבא הוא‬
‫בגדר הרהור ואתגר בלבד לעת עתה‬
‫• שדה התוכן של מבני הנתונים היה מתואר‬
‫בעיצוב תוכנה כ‪ info_type :‬שאחריו שלוש נקודות‪...‬‬
‫• בשפות מבוססות עצמים‪ ,‬טיפוס מוגדר על ידי מחלקה‬
‫• הגדרת מחלקה לכל טיפוס ‪ -‬תצריך שינויים והתאמות‬
‫עבור כל אפליקציה‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪31‬‬
‫סקירת שינויים‬
‫גנריות‬
‫‪2‬‬
‫• בשפות מונחות עצמים (גרסאות אחרונות) ניתן‬
‫להגדיר טיפוס כללי‪/‬גנרי‪.‬‬
‫← מבנה הנתונים יוגדר עבור הטיפוס הכללי‬
‫• קביעת הטיפוס תעשה רק בזמן הריצה ועבור כל‬
‫תוכנית בנפרד‪.‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪32‬‬
‫סקירת שינויים‬
‫גנריות‬
‫‪3‬‬
‫היתרון של שימוש בגנריות בולט ומובן‬
‫חסרונות לדוגמה‪ :‬איך מגדירים פעולת השוואה כללית?‬
‫לבטים‪ :‬האם ללמד את ההכללה וההפשטה הזו כבר‬
‫במבנה הנתונים הראשון או לחדש רעיון ו"לנוח"?‬
‫ההמלצה שלנו בשלב זה‪ :‬ללמד גנריות החל‬
‫מרשימה ולחזור למחסנית בהמשך‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪33‬‬
‫סקירת שינויים‬
‫גנריות‬
‫הדגמה‪ :‬חוליה גנרית ‪ /‬רשימה ‪4‬‬
‫גנרית ותוכנית המשתמשת בהם‬
‫>‪public class Node<T‬‬
‫{‬
‫;‪private T info‬‬
‫;‪private Node<T> next‬‬
‫)‪public Node(T x‬‬
‫{‬
‫;‪this.info = x‬‬
‫;‪this.next = null‬‬
‫}‬
‫)‪public Node (T x, Node<T> next‬‬
‫{‬
‫…;‪this.info = x‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪34‬‬
5 ‫גנריות‬
‫סקירת שינויים‬
public class List<T>
{
private Node<T> head;
public List()
{
this.head = null;
}
public Node<T> getFirst()
{
return(this.head);
}
public boolean isEmpty()
{
return(this.head == null);
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
}35
© ‫המרכז להוראת המדעים‬
‫האוניברסיטה העברית בירושלים‬
‫סקירת שינויים‬
‫גנריות ‪6‬‬
‫‪public class Test‬‬
‫{‬
‫)‪public static void main (String[] args‬‬
‫;)(>‪List<Point> lst = new List<Point‬‬
‫;)(>‪List<Date> l2 = new List<Date‬‬
‫…‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫}‬
‫‪36‬‬
‫סקירת שינויים נוספים בקצרה‬
‫• העלמות המושג "מופשט" מהגדרת טיפוס נתונים‬
‫• מעבר לסביבות עבודה חדשות‬
‫• מבנה בחינת הבגרות‪ :‬שינוי הלוקח בחשבון‬
‫מינימום שינויים‬
‫מקסימום התחשבות בתלונות קיימות וישנות‪...‬‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪37‬‬
‫קשר בין היחידות‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫מחכים ליסודות ומשתדלים לתאם מושגים‪ ,‬מחלקות‬
‫(קלט‪/‬פלט)‪ ,‬כיווני עבודה וסביבות עבודה‬
‫הקשר עם היחידה החמישית מובן מאליו‬
‫היחידה החמישית מרחיבה ומעמיקה את הידע בתמ"ע‬
‫שינויים לשוניים קלים בין יחידות ‪ 4‬ו‪5-‬‬
‫הקשר לימודי חזק בשילוב היחידות ה‪ 4-‬וה‪5-‬‬
‫הקשר לימודי חזק בין כל מכלול היחידות בשפות‬
‫מבוססות עצמים ולימודים מעבר לחמש יחידות‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪38‬‬
‫קשר עם ועדת המקצוע והפיקוח‬
‫• ועדת המקצוע והפיקוח יצטרכו לתת דעתם על העומס‬
‫הקיים ביחידה‬
‫• על התכנים הרצויים וההדגשים הרצויים עם עריכת‬
‫היחידה מחדש‬
‫עיצוב תוכנה מבוסס עצמים – יום עיון מרכז המורים הארצי‬
‫המרכז להוראת המדעים ©‬
‫האוניברסיטה העברית בירושלים‬
‫‪39‬‬