1 / 87

ברוכים הבאים

ברוכים הבאים. יום עיון עיצוב תוכנה מבוסס עצמים תשס"ח - 2008. מבנה יום העיון ותכניו. 12:30– 13:30 פתיחה פרופ' יגאל גלילי מנהל המרכז ויו"ר החוג להוראת המדעים, האונ' העברית בירושלים עפרה ברנדס:

dayton
Télécharger la présentation

ברוכים הבאים

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ברוכים הבאים יום עיון עיצוב תוכנה מבוסס עצמים תשס"ח - 2008 יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  2. מבנה יום העיון ותכניו 12:30– 13:30 פתיחה פרופ' יגאל גלילי מנהל המרכז ויו"ר החוג להוראת המדעים, האונ' העברית בירושלים עפרה ברנדס: מחלקות ועצמים – מודל משופר להקצאת זיכרון דינמית: רעיונות ומושגי יסוד 13:30– 14:30 עפרה ברנדס: מבנים מבוססי חוליות וטיפוסי נתונים מופשטים 14:30– 15:30 פרופ' כתריאל בארי: רשימה במבט אחר 15:30– 16:00 הפסקת כיבוד 16:00– 17:15 ד"ר תמי לפידות עפרה ברנדס: הצגת האתר של היחידה אסתי אפלבוים: ויזואליזציה של עצמים והפניות 17:15– 18:30 אילן פרץ: מפה – טיפוס חדש ותרגיל מסכם 18:30– 18:45 הפסקה קצרה 18:45– 20:00 אילן פרץ: הכיוון של שאלות הבגרות – ניתוח והדגמה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

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

  5. תכנים ישנים בתלבושת חדשה • מטרות היחידה • הקניית העקרונות של הגישה המערכתית, ובפרט הצורך והתועלת שבחלוקת מערכת לתת-משימות. • 2. הפשטה ויצירה: • פיתוח חשיבה מופשטת. היכולת להגדיר כלים מורכבים מאלו הבסיסיים הניתנים על ידי שפת התכנות. • 3. טיפוסי נתונים ואוספי נתונים: • יישום רעיון ההפשטה והיצירה להרחבת השפה ויצירת ארגז כלים של מחלקות המגדירות • סוגי אוספי נתונים שימושיים. הגדרת מבני נתונים (data structures) וטיפוסי נתונים מופשטים (abstract data types) וחידוד ההבדל ביניהם. • 4. אלגוריתמים ומושגי יעילות: • חזרה והעמקה בנושא היעילות של אלגוריתמים וכיצד מודדים אותה. דיון ביעילות של האלגוריתמים המפותחים ביחידה, כולל אלגוריתמים המאפשרים פעולות חיפוש ומיון בסוגי אוסף שונים. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  6. אותה יחידה בתלבושת מחודשת • המעבר לשפות מבוססות עצמים: • אינו משנה תכנים • משנה דרכי מימוש וייצוג, אופני חשיבה • מציע יכולות שהשפות מכילות באופן טבעי יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  8. מושגים, דרכי חשיבה וכתיבה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  10. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  11. תרשים UML יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  12. יצירת עצמים • דרך להקצאת זיכרון דינמי. • הפעולה new… היא המקצה זיכרון דינמי תוך כדי ריצת התוכנית. • הפעולה new: • מקצה שטח לעצם • מאתחלת את השטח לפי כללי השפה • לאחר מכן מתבצע אתחול בעזרת פעולה בונה המוגדרת במחלקה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  13. עצם מוחזק על ידי משתנה Bucket b1 = new Bucket (4); כשאנו מדברים על "העצם b1", אנו מתייחסים לשלושה רכיבים: • המשתנה: b1 (מטיפוס המחלקה Bucket ) • העצם החדש מטיפוס דלי שקיבולתו 4 ליטרים • ההפניה אל העצם החדש המוחזקת במשתנה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  14. תרשים עצמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  16. המחלקה מלבן Rectangle דוגמה: Rectangle double width double height double width double area Rectangle (double width, double height) double getWidth() void setWidth (double w) double getHeight() void setHeight (double h) double getArea() ……. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  17. סיכום ביניים רעיונות היסוד של עיצוב תוכנה נשארו: • הכמסה • הסתרת מידע • שימוש חוזר בקוד • עבודה עם ממשקים • טיפוסי נתונים מופשטים התמיכה של השפות ברעיונות אלו – חזקה וטבעית יותר. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  18. עצם מורכב הפניה ל • עצם שאחת מתכונותיו (לפחות) היא עצם (בעצמה) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  20. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  21. עצם המכיל הפניה לעצם מאותו טיפוס יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

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

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

  25. חוליה של מספרים שלמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  26. שרשרת חוליות של מספרים שלמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  27. שרשרת חוליות היא מבנה • אין מחלקה הנקראת שרשרת חוליות • שרשרת החוליות היא מבנה המורכב ממופעים של מחלקת חוליה מסוימת • שרשרת חוליות אינה יכולה להיות ריקה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  28. temp IntNode info next 56 null info info info next next next null 4 7 5 פעולות על שרשרת חוליות - הכנסה IntNode temp = new IntNode (56); temp.setNext (n.getNext()); n.setNext (temp); n IntNode IntNode IntNode יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  29. info info next next null 4 5 temp פעולות על שרשרת חוליות - הוצאה IntNode temp = n.getNext(); n.setNext (temp.getNext()); temp.setNext (null); n IntNode IntNode IntNode info next 7 null יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  30. פעולות נוספות על שרשרת חוליות • סריקת השרשרת • עדכון ואחזור ערכים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  32. myChain chain 4 5 7 null הכנסת ערך לשרשרת חוליות (פרמטר) נתונה שרשרת ממוינת: הפעולה מכניסה חוליה חדשה למקום הנכון בהתאם למיון: public static void InsertIntoSortedChain (IntNode chain, int x) { ... } נזמן את הפעולה: InsertIntoSortedChain (myChain, 2) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  33. chain myChain chain 2 myChain 5 5 4 4 7 7 null null הכנסת ערך לשרשרת חוליות (פרמטר) בעת ביצוע הפעולה: • איתור מקום ההכנסה • יצירת חוליה חדשה המכילה את הערך 2 • הכנסת החוליה למקום הראשון בשרשרת החוליות: המשתנה myChain לא עבר שינוי יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  35. החלפת טיפוס של חוליה אחרי שרשרת של שלמים נרצה שרשרת של מחרוזות ושרשרת של נקודות Point ושרשרת של Student ושרשרת של אפרוחים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  36. יש להגדיר: חוליה כללית מנגנון הגנריות(genericity) • מאפשר להשתמש בהגדרת מחלקה בטיפוס כללי שיסומן על ידי משתנה: T, R, K, V... • הטיפוס ייקבע רק בזמן הריצה של התוכנית יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  37. חוליה כללית Node<T> יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

  39. מבנים מבוססי חוליות • החוליה תשמש אותנו לייצוג כל המבנים והטיפוסים שיוצגו במהלך היחידה • ניתן יהיה להשתמש במבנה לינארי של חוליות: יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  40. מבנים מבוססי חוליות • ניתן יהיה להשתמש במבנה היררכי של חוליות: יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

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

  43. הרצאה שנייה אוספים כלליים: ייצוג על ידי מבני חוליות הגדרת טיפוסי נתונים מופשטים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

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

  46. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  47. שימוש לפני מימוש • לכל אורך היחידה – נעשה שימוש בטיפוסים לפני שנתעסק במימושם • ללקוח (משתמש כלשהו) הייצוג לא חשוב • לצורך השימוש – ניתן להשתמש בספריות האוספים המוכנות הקיימות באתר: http://sites.huji.ac.il/science/unit4_2007/ דוגמאות לשימושים מופיעות בספר ובמצגות יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  48. ייצוג המחסנית • ייצוג אפשרי מערך – מוזכר ללא מימוש • הייצוג המומלץ: שרשרת חוליות • השרשרת מוסתרת על ידי טיפוס האוסף ולכן נפתרות כל הבעיות שהיו בשרשרת חוליות • הייצוג מאפשר ביצוע פעולות באופן יעיל יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

  49. יעילות פעולות הממשק – מחסנית יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008

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

More Related