1 / 68

עיצוב תוכנה מבוסס עצמים מורים מובילים תשס"ח

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

olesia
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. עיצוב תוכנה מבוסס עצמים מורים מובילים תשס"ח מפגש שני - 20.02.2008 פרק 6: הפניות ועצמים מורכבים השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

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

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

  5. מי היא השלישייה הפותחת? העצם ההפניה (כתובת) Bucket b1 המשתנה המחזיק את ההפניה השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  6. ערך מיוחד: ההפניה הריקה ההפניה הריקה שאינה מפנה לעצם נקראת null Bucket b=null; Turtle t=null; String s=null; int[] a=null; int iNum=null; Error: incompatible types found : <nulltype> required: int אגב האיור המוכר – נעלם השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  7. ערך מיוחד: ההפניה הריקה האם יש ה-"null"-ים שונים? Teacher t=null; Student s=null; if(t==s)System.out.println(“yes”); else System.out.println(“no”); Error: incomparable Teacher and Student השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

  9. אתחול משתנים משתנים שאינם מאותחלים גורמים לשגיאת הידור! Box b1; b1.setWidth(5); משנה מצב לעצם שאינו קיים Error: variable b1 might not have been initialized השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  10. משתנה מטיפוס המחלקה יאותחל לערך הפניה כלשהו מאותו טיפוס. אתחולים הערך null הוא ערך תקני לאתחול השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  11. אתחול סביר יהיה על ידי בניית מופע של המחלקה והצבתו במשתנה. Bucket b1 = new Bucket(4); אתחול משתנים השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  12. אתחול אפשרי אחר: הצבת מופע קיים לתוך המשתנה: Bucket b1 = new Bucket(10); Bucket b2 = b1; זוהי העברת ערך של משתנה מטיפוס אותה מחלקה למשתנה "שלנו". אתחול משתנים השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  13. שימוש בפעולה בונה מעתיקה (אם קיימת!!): Bucket b1 = new Bucket(10); Bucket b2 = new Bucket(b1); אתחול משתנים השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  14. אתחול משתנים האתחול לערך ההפניה המיוחד - ההפניה הריקה: Bucket b1 = null; האתחול חוקי לחלוטין b1.fill(10); הפעלת פעולה על משתנה שערכו null גורמת לשגיאת זמן ריצה! NullPointerException השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  15. אתחול משתנים משתנה מטיפוס מחלקה שהוצהר ולא אותחל – לא מקבל null!!! Bucket b1; If(b1==null)System.out.println(“null”); משתנים שאינם מאותחלים גורמים לשגיאת הידור! Error: variable b1 might not have been initialized השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  16. הפניות ועצמים - השוואות Bucket b1=new Bucket(10); Bucket b2=new Bucket(10); if(b1==b2)System.out.println(“Yes”); else System.out.println(“No”); Bucket b1=new Bucket(10); Bucket b2=new Bucket(b1); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  17. הפניות ועצמים - השוואות Bucket b1=new Bucket(10); Bucket b2= b1; if(b1==b2)System.out.println(“Yes”); else System.out.println(“No”); if (b1==b2)… בדיקה האם יש שתי הפניות אל אותו עצם ואיך לבדוק האם עצמים זהים? if(b1.getCapacity()==b2.getCapacity() && b1.getCurrentAmount()==b2.getCurrentAmount())… השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  18. מערך של עצמים Box[] arr; הכרזה על משתנה שבעתיד יחזיק הפניה למערך (ולא מערך!) arr=new Box[5]; יצירת עצם מערך והצבת הפניה לעצם בתוך המשתנה בעת יצירת מופע של עצם מתבצע אתחול שלו תאים במערך מאותחלים על פי ברירת המחדל השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  19. מערך של עצמים - אתחול תאים אתחול תאי המערך: arr[0] = new Box(1, 2, 5); arr[1] = new Box(3, 2, 1); arr[2] = new Box(2, 2.5, 2); ובסלנג נאמר כך: השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  20. עבודת כיתה דף עבודה מספר 4 השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

  22. עצם מורכב כאשר תכונה אחת או יותר של מחלקה היא מטיפוס מחלקה כלשהי, אנו קוראים לעצם הנוצר מהמחלקה עצם מורכב (composite object) השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  23. ייצוג המחלקה (מגדירה עצם מורכב) public class Student { private String name; private String phoneNum; private Parent parent; … } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

  25. String name String phoneNum Parent parent Student Student (String name, String phoneNum, Parent parent) String getName() String getPhoneNum() void setPhoneNum (String phoneNum) Parent getParent() String name String cellNum Parent Parent (String name, String cellNum) String getName() String getCellNum() void setCellNum(String cellNum) הדוגמה המלווה:מערכת בית ספרית היכן פעולות ה-setName(…) ?? השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  26. פעולהבונה public Student (String name, String phoneNum, Parent parent) { this.name = name; this.phoneNum = phoneNum; this.parent = parent; } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  27. העברת הפניה כפרמטר • בעיה של עודף הפניות לעצם אחד: כמה הפניות? Parent par = st1.getParent(); הפניה של התכונה הפניה לפני הזימון par public Parent getParent(){ Parent p1=this.parent; return p1; } הפניה אחרי הזימון משתנה מקומי בפעולה השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  28. רישוםהתלמיד • ההורה נרשם במאגר ההורים: Parent p1 = new Parent ("Katz Meir", "054-2345678"); • התלמיד נרשם : Student st1 = new Student ("Katz Oren", "02-8765432", p1); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  29. הפעולהgetParent() public Parent getParent() { returnthis.parent; } Parent p = st1.getParent(); String parentName = p.getName(); או בשורה אחת: String parentName = st1.getParent().getName(); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  30. תכונהמטיפוסמחלקה עד כה ראינו את הקוד של המחלקה באופן כללי. עתה ננסה להבין, מה המשמעות של הקוד מבחינת ההתרחשות בזיכרון. נתמקד בתכונה מטיפוס מחלקה: Parent parent; השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  31. st1 Student name phoneNum parent p1 Parent name cellNum פעולה בונה זימון: Parent p1=new Parent("Katz Meir", "054-2345678"); Student st1=new Student("Katz Oren","02-8765432",p1); public Student (String name, String phoneNum, Parent parent) { … this.parent = parent; } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  32. הפניה כערך החזרה גוף הפעולה getParent(): public Parent getParent() { returnthis.parent; } שימוש בפעולה : Parent p1=new Parent("Katz Meir", "054-2345678"); Student st1=new Student("Katz Oren", "02-8765432", p1); Parent p2=st1.getParent(); p2.setCellNum ("052-6782345"); ציירו תרשים עצמים המתאר את העצמים הקיימים בקטע הקוד המופיע למעלה ואת מצבם בסוף הקטע. השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  33. p1 Parent p2 name cellNum 054-2345678 Katz Meir st1 Student name phoneNum parent Katz Oren 02-8765432 הפניה כערך החזרה Parent p1=new Parent("Katz Meir","054-2345678"); 052-6782345 Student st1 = new Student ("Katz Oren", "02-8765432", p1); Parent p2 = st1.getParent(); p2.setCellNum ("052-6782345"); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

  35. הפניות שונות לאותו עצם – הפן החיובי • אם נרצה לעדכן את הטלפון הסלולארי של ההורה, מספיק לעשות זאת דרך אחד האחים. העדכון ישתקף אצל יתר האחים • כאשר שני אחים (או יותר) לומדים באותו בית ספר, אזי התכונה parent שלהם תצביע לאותו הורה. Parent p1 = new Parent ("Katz Meir", "054-2345678"); Student st1 = new Student ("Katz Oren", "02-8765432", p1); Student st2 = new Student ("Katz Omri", "02-8765432", p1); Parent p2 = st1.getParent(); p2.setCellNum ("052-6782345"); System.out.println(st1.getParent().getCellNum()); System.out.println(st2.getParent().getCellNum()); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

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

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

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

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

  41. שימושב-StudentList StudentList studentList = new StudentList(); Student st1 =new Student("Potter Harry","02-9965187", p1); Student st2 =new Student("Scofield Michael","03-6742201", p2); להלן הוספת שני תלמידים לרשימה הכיתתית:// studentList.add (st1); studentList.add (st2); System.out.println (studentList); השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

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

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

  45. איך מחזיקים את האוסף? • אין לנו אלא מערך... ייצוג האוסף רשימה כיתתית: public class StudentList { public static final int MAX_STUDENTS = 35; private Student[] list; … } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  46. ייצוגשלStudentList לפי כללי בית ספר אין אפשרות שמספר התלמידים בכיתה יעלה על 35. public class StudentList { public static final int MAX_STUDENTS = 35; private Student[] list; … } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  47. הפעולההבונהשלStudentList public StudentList () { this.list = new Student[MAX_STUDENTS]; } פעולה זו מייצרת מערך ריק (שבכל תאיו יש null( על מנת לאתחל את התאים - יש להשתמש בפעולת ההוספה לרשימה כיתתית השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

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

  49. פעולתההוספה public class StudentList { public static final int MAX_STUDENTS = 35; private Student[] list; privateint lastPosition; public void add (Student st) { this.list[this.lastPosition] = st; this.lastPosition++; } } השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

  50. שאלות ?כתבו את פעולת ההוספה ללא הגדרת התכונה lastPosition. נתחו את זמן הריצה של פעולת ההוספה עם התכונה ובלעדיה, ונסחו את מסקנותיכם. ?נניח כי הרשימה הכיתתית lst קיימת. במהלך תוכנית כלשהי, הוצבה במשתנה student1 הפניה לתלמיד ואז ביצעה התוכנית את הזימון הזה: lst.add (student1); א. התבוננו בפקודה זו: this.list [this.lastPosition] = st; כמה הפניות אל התלמיד החדש קיימות לפני ביצוע שורת הקוד הבאה שבגוף פעולת ההוספה, וכמה קיימות אחריה. הסבירו את תשובתכם בפירוט. ב. כמה הפניות לתלמיד יישארו עם תום פעולת ההוספה? השתלמות ב-"עיצוב תוכנה מבוסס עצמים" תשמ"ח – 2008 באר-שבע

More Related