930 likes | 1.26k Views
ברוכים הבאים. יום עיון עיצוב תוכנה מבוסס עצמים תשס"ח - 2008. מבנה יום העיון ותכניו. 12:30– 13:30 פתיחה פרופ' יגאל גלילי מנהל המרכז ויו"ר החוג להוראת המדעים, האונ' העברית בירושלים עפרה ברנדס:
E N D
ברוכים הבאים יום עיון עיצוב תוכנה מבוסס עצמים תשס"ח - 2008 יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מבנה יום העיון ותכניו 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
ברוכים הבאים דברי פתיחה פרופ' יגאל גלילי מנהל המרכז ויו"ר החוג להוראת המדעים האוניברסיטה העברית בירושלים תשס"ח - 2008 יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
הרצאה ראשונה מחלקות ועצמים מודל משופר להקצאת זיכרון דינמית רעיונות ומושגי יסוד ביחידת הלימוד יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
תכנים ישנים בתלבושת חדשה • מטרות היחידה • הקניית העקרונות של הגישה המערכתית, ובפרט הצורך והתועלת שבחלוקת מערכת לתת-משימות. • 2. הפשטה ויצירה: • פיתוח חשיבה מופשטת. היכולת להגדיר כלים מורכבים מאלו הבסיסיים הניתנים על ידי שפת התכנות. • 3. טיפוסי נתונים ואוספי נתונים: • יישום רעיון ההפשטה והיצירה להרחבת השפה ויצירת ארגז כלים של מחלקות המגדירות • סוגי אוספי נתונים שימושיים. הגדרת מבני נתונים (data structures) וטיפוסי נתונים מופשטים (abstract data types) וחידוד ההבדל ביניהם. • 4. אלגוריתמים ומושגי יעילות: • חזרה והעמקה בנושא היעילות של אלגוריתמים וכיצד מודדים אותה. דיון ביעילות של האלגוריתמים המפותחים ביחידה, כולל אלגוריתמים המאפשרים פעולות חיפוש ומיון בסוגי אוסף שונים. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
אותה יחידה בתלבושת מחודשת • המעבר לשפות מבוססות עצמים: • אינו משנה תכנים • משנה דרכי מימוש וייצוג, אופני חשיבה • מציע יכולות שהשפות מכילות באופן טבעי יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
השפות החדשות מאפשרות מימוש מלא וטבעי לרעיונות המוצגים ביחידה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מושגים, דרכי חשיבה וכתיבה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מחלקה – תבנית לייצור עצמים • מגדירה טיפוס נתונים (מופשט) • מוגדרת בעזרת ממשק • הממשק אינו חושף דרך מימוש וייצוג (עד כמה שאפשר) • הממשק מגדיר את הפעולות שהמחלקה מאפשרת • מחלקה מתוארת בעזרת תרשימי UML(גם קשרים בין מחלקות) • תרשימי עצמים עוזרים בסרטוט ומעקב אחר פעולות יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
תרשים UML יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יצירת עצמים • דרך להקצאת זיכרון דינמי. • הפעולה new… היא המקצה זיכרון דינמי תוך כדי ריצת התוכנית. • הפעולה new: • מקצה שטח לעצם • מאתחלת את השטח לפי כללי השפה • לאחר מכן מתבצע אתחול בעזרת פעולה בונה המוגדרת במחלקה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
עצם מוחזק על ידי משתנה Bucket b1 = new Bucket (4); כשאנו מדברים על "העצם b1", אנו מתייחסים לשלושה רכיבים: • המשתנה: b1 (מטיפוס המחלקה Bucket ) • העצם החדש מטיפוס דלי שקיבולתו 4 ליטרים • ההפניה אל העצם החדש המוחזקת במשתנה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
תרשים עצמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
טיפוס נתונים מופשט • אם הממשק אינו חושף את דרך המימוש והייצוג, אנו אומרים שלפנינו: טיפוס נתונים מופשט • מאפשר שינוי של דרך הייצוג והמימוש - בלי שתוכנית כלשהי המשתמשת בעצמים מטיפוס המחלקה תצטרך לבצע שינוי כלשהו יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
המחלקה מלבן 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
סיכום ביניים רעיונות היסוד של עיצוב תוכנה נשארו: • הכמסה • הסתרת מידע • שימוש חוזר בקוד • עבודה עם ממשקים • טיפוסי נתונים מופשטים התמיכה של השפות ברעיונות אלו – חזקה וטבעית יותר. יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
עצם מורכב הפניה ל • עצם שאחת מתכונותיו (לפחות) היא עצם (בעצמה) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מעצמים כאלה אפשר לייצר "אוסף" • אוסף יכול להיות ספציפי (מסוים, פרטי): אוסף של תלמידים(בכיתה, ...) • אוסף יכול להיות סוג כללי (סדרה, מחסנית, תור...) • המעבר מנתונים בודדים לאוספים של נתונים הוא נקודת המעבר מיסודות לעיצוב תוכנה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
עצם המכיל הפניה לעצם מאותו טיפוס יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
ניתן לשרשר עצמים שכאלה: יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
וגם שרשור כזה אפשרי: לא הכרחי שלכל עצם יהיה משתנה המחזיק הפניה אליו יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
אוספים דינמיים יש לנו כבר: • צורך להחזיק אוספים (ראו את המבוא לעיצוב תוכנה) • "טכניקה" לשרשור עצמים מאותו טיפוס "נעזוב" את מבנה הנתונים המוכר "מערך" ונעבור למבנה נתונים דינמי, שיאפשר להחזיק: • כמות גדולה של נתונים מאותו טיפוס • כמות שאינה מוגבלת בגודלה • יכולה לקטון ולגדול (דינמית) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
חוליה של מספרים שלמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
שרשרת חוליות של מספרים שלמים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
שרשרת חוליות היא מבנה • אין מחלקה הנקראת שרשרת חוליות • שרשרת החוליות היא מבנה המורכב ממופעים של מחלקת חוליה מסוימת • שרשרת חוליות אינה יכולה להיות ריקה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
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
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
פעולות נוספות על שרשרת חוליות • סריקת השרשרת • עדכון ואחזור ערכים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
פעולות המקבלות שרשרת כפרמטר (בעיות) • פעולה המקבלת 'שרשרת חוליות' – מקבלת הפניה לחוליה הראשונה בשרשרת • תחילת השרשרת היא מקום בעייתי עבור חלק מהפעולות נדגים בקצרה (פירוט קיים בספר ובמצגות): יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
myChain chain 4 5 7 null הכנסת ערך לשרשרת חוליות (פרמטר) נתונה שרשרת ממוינת: הפעולה מכניסה חוליה חדשה למקום הנכון בהתאם למיון: public static void InsertIntoSortedChain (IntNode chain, int x) { ... } נזמן את הפעולה: InsertIntoSortedChain (myChain, 2) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
chain myChain chain 2 myChain 5 5 4 4 7 7 null null הכנסת ערך לשרשרת חוליות (פרמטר) בעת ביצוע הפעולה: • איתור מקום ההכנסה • יצירת חוליה חדשה המכילה את הערך 2 • הכנסת החוליה למקום הראשון בשרשרת החוליות: המשתנה myChain לא עבר שינוי יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
סיכום ביניים • אין מחלקה המגדירה טיפוס של 'שרשרת חוליות' • שרשרת חוליות היא מבנה של עצמים מטיפוס חוליה • השרשרת לעולם אינה ריקה • בחלק מהפעולות מתעוררות בעיות בטיפול בחוליה הראשונה יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
החלפת טיפוס של חוליה אחרי שרשרת של שלמים נרצה שרשרת של מחרוזות ושרשרת של נקודות Point ושרשרת של Student ושרשרת של אפרוחים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יש להגדיר: חוליה כללית מנגנון הגנריות(genericity) • מאפשר להשתמש בהגדרת מחלקה בטיפוס כללי שיסומן על ידי משתנה: T, R, K, V... • הטיפוס ייקבע רק בזמן הריצה של התוכנית יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
חוליה כללית Node<T> יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יתרונות • החוליה הגנרית – הגדרה אחת עבור כל סוגי הטיפוסים היכולים להישמר באוספים • ניתן לבנות שרשרות, ולכתוב את מרבית הפעולות הנדרשות לגבי אוסף בלי להתחייב לטיפוס חוליה ספציפי יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מבנים מבוססי חוליות • החוליה תשמש אותנו לייצוג כל המבנים והטיפוסים שיוצגו במהלך היחידה • ניתן יהיה להשתמש במבנה לינארי של חוליות: יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מבנים מבוססי חוליות • ניתן יהיה להשתמש במבנה היררכי של חוליות: יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מבנים מבוססי חוליות – סיכום • ניתן להשתמש ישירות במבני חוליות לייצוג אוספים • ניתן להגדיר את כל הפעולות על אוספים (סריקה, הכנסה, הוצאה, עדכון) • אבל - • פוגע בכלליות הפעולות (טיפול מיוחד במקום הראשון למשל) • דורש כתיבת קוד מחדש לכל יישום • אינו מספק הסתרה כראוי (ניתן לחבל במבנה) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מבנים מבוססי חוליות – כדרך ייצוג • עדיף להגדיר מחלקות של אוספים כלליים, שייצוגן יהיה בעזרת מבני חוליות • כך ניתן לקבל (בדרך כלל אך לא תמיד!) טיפוסי נתונים מופשטים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
הרצאה שנייה אוספים כלליים: ייצוג על ידי מבני חוליות הגדרת טיפוסי נתונים מופשטים יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
אוספים • עיצוב תוכנה מטפלת באוספים של נתונים • על אוספים מוגדרות פעולות: הכנסה, הוצאה ועדכון • משמעותן מוגדרת על ידי פרוטוקול המתאר את דרך הגישה לאיברי האוסף (השווה:מחסנית, תור, רשימה...) • ופעולות נוספות בהתאם לטיפוס האוסף – למשל מעבר למקום הבא (מאפשר סריקה ברשימה) יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
מחסנית Stack • טיפוס אוסף המוגדר על ידי פרוטוקול LIFO • טיפוס גנרי – טיפוס האיברים ייקבע רק בעת בניית מחסנית חדשה (מחסנית קונקרטית) • טיפוס נתונים מופשט – העיסוק בנתונים הוא רק באמצעות פעולות הממשק, אופן הייצוג מוסתר, פעולות הטיפוס שומרות על המבנה והסדר באוסף יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
שימוש לפני מימוש • לכל אורך היחידה – נעשה שימוש בטיפוסים לפני שנתעסק במימושם • ללקוח (משתמש כלשהו) הייצוג לא חשוב • לצורך השימוש – ניתן להשתמש בספריות האוספים המוכנות הקיימות באתר: http://sites.huji.ac.il/science/unit4_2007/ דוגמאות לשימושים מופיעות בספר ובמצגות יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
ייצוג המחסנית • ייצוג אפשרי מערך – מוזכר ללא מימוש • הייצוג המומלץ: שרשרת חוליות • השרשרת מוסתרת על ידי טיפוס האוסף ולכן נפתרות כל הבעיות שהיו בשרשרת חוליות • הייצוג מאפשר ביצוע פעולות באופן יעיל יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
יעילות פעולות הממשק – מחסנית יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008
ייצוג המחסנית • לא כל כך חשוב והכרחי לעסוק בו: זהו טיפוס מופשט • ניתן לשנות את הייצוג בלי לשנות את הממשק המחסנית היא טיפוס נתונים מופשט יום עיון – עיצוב תוכנה מבוסס עצמים סיון תשס"ח – יוני 2008