Download presentation
Presentation is loading. Please wait.
Published byἩρωδιάς Βασιλείου Modified over 6 years ago
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
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.