Presentation is loading. Please wait.

Presentation is loading. Please wait.

© המרכז להוראת המדעים האוניברסיטה העברית בירושלים

Similar presentations


Presentation on theme: "© המרכז להוראת המדעים האוניברסיטה העברית בירושלים"— Presentation transcript:

1 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
עצוב תוכנה מבוסס עצמים שיעור 8 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

2 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מה בשיעור? מימוש תור בעזרת רשימה. תרגול עם 3 רשימות. הפסקה רשימה כללית גֶנֶרית תרגול גנריות © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

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

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

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

6 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה כללית גֶנֶרית © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

7 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה כללית Object קיימת אפשרות שגם המחלקה List תוגדר ככללית בדיוק באותה צורה שהגדרנו את המחסנית הכללית. מאחר והרשימה ממומשת ע"י שרשרת חוליות – כל חוליה היא איבר ברשימה שמוגדרת ע"י המחלקה Node. לכן כדי שהרשימה תהיה כללית עלינו להגדיר את תכונת ה-info במחלקה Node מטיפוס Object. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

8 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הכללית Node © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

9 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הכללית Node © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

10 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הכללית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

11 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הכללית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

12 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הכללית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

13 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה כללית - חסרונות ניתן להכניס לאותה רשימה ערכים מסוגים שונים: יש צורך בהמרה (שלא תמיד ידועה): List list = new List(); list.insert(null,3); list.insert(null,"hello world"); list.insert(null,'*'); Node pos = list.getFirst(); int x = (Integer)pos.getInfo(); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

14 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה כללית - חסרונות הגדרה של מספר רשימות מסוגים שונים נראית זהה, דבר הגורם לבלבול וקושי בהבנת הקוד: List list1 = new List(); // הכוונה לרשימה של מספרים שלמים List list2 = new List(); // הכוונה לרשימה של מחרוזות List list3 = new List(); // הכוונה לרשימה של דליים : © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

15 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה כללית גֶנֶרית קיימת אפשרות שהמחלקה List תהיה גנרית, כלומר שאיבריה יהיו מטיפוס עצם כללי <info-type>List. בזמן יצירת עצם מסוג רשימה יש לקבוע את סוג איברי הרשימה בהחלפת ה info-type בטיפוס העצם הרצוי. List<Integer> list1= new List<Integer>(); רשימה של מספרים שלמים בלבד! list1 List<String> list2 = new List<String>(); רשימה של מחרוזות בלבד! list2 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

16 רשימה כללית גֶנֶרית (המשך...)
ניתן להכניס לכל רשימה ערכים מסוג אחד בלבד: List<Integer> list1 = new List<Integer>(); List<String> list2 = new List<String>(); list1.insert(null,3); list1.insert(null,"hello world"); //compile-time error! list2.insert(null,"hello world"); //ok © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

17 רשימה כללית גֶנֶרית (המשך...)
מאחר והרשימה ממומשת ע"י שרשרת חוליות גם המחלקה Node צריכה להיות גנרית – התכונה info תהיה מטיפוס עצם כללי <info-type>Node. אין צורך בהמרה: Node<Integer> node = new Node<Integer>(3); node.setInfo(12); node = list1.getFirst(); int x = node.getInfo(); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

18 רשימה כללית גֶנֶרית (המשך...)
הגדרה של מחלקה גנרית נראה כך: class Node<T> { private T info; : } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

19 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הגנרית Node © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

20 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הגנרית Node © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

21 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הגנרית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

22 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הגנרית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

23 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
המחלקה הגנרית List © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

24 רשימה כללית גֶנֶרית (המשך...)
לסיכום: אם מחלקה מוגדרת כגנרית, אז ניתן לומר שממחלקה זו ניתן להגדיר טיפוסי עצמים חדשים נוספים כגון: List<Integer> List<String> List<Bucket> : © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

25 דוגמאות לרשימה כללית גֶנֶרית
נתונה מחלקה Book שמגדירה ספר (שם ספר, מחברים, מס' עותקים...). אוסף ספרים בספרייה יוגדר כרשימה: רשימה של מחסניות כלליות: רשימה של רשימות מסוג ספר: List<Book> library = new List<Book>(); List<Stack> list1 = new List<Stack>(); List<List<Book>> list2 = new List<List<Book>>(); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

26 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה של מספרים שלמים מחלקת רשימה שתכונת ה-info שלה מטיפוס int: List lst1 = new List(); lst1 head info next info next info next 6 8 3 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

27 רשימה כללית מטיפוס Object
מחלקת רשימה שתכונת ה-info שלה מטיפוס Object: List lst2 = new List(); lst1 lst2 head info next © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

28 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
רשימה גנרית מחלקת רשימה גנרית שתכונת ה-info שלה מטיפוס T: List<Bucket> lst3 = new List<Bucket>(); lst3 head info next © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

29 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תרגול © המרכז להוראת המדעים האוניברסיטה העברית בירושלים

30 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים


Download ppt "© המרכז להוראת המדעים האוניברסיטה העברית בירושלים"

Similar presentations


Ads by Google