Download presentation
Presentation is loading. Please wait.
Published byΖεφύρα Θεοδωρίδης Modified over 6 years ago
1
Web Services אוספים - Collections ליווי מקצועי : ארז קלר
2
מערכים מול אוספים. המחלקה ArrayList המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
3
מערכים מול אוספים השוואה
מערכים הם בגודל קבוע, גודלם נקבע בזמן הקצאתם, ולא ניתן לשנותם. אוספים הם בגודל משתנה, בזמן הקצאתם מוגדר להם גודל התחלתי, בעת הצורך הם גדלים או קטנים . האלמנטים במערך אינם יכולים להיות Read Only . באוספים כן. מערכים לא חייבים להיות הטרוגניים. אוספים הם תמיד הטרוגניים. מערכים הם מהירים יותר אולם פחות גמישים. אוספים הם גמישים יותר אולם איטיים יותר.
4
מערכים מול אוספים. המחלקה ArrayList. המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
5
המחלקה ArrayList מחלקת ה- Collection השכיחה והפופולרית ביותר.
מייצגת אוסף הטרוגני של אובייקטים, מגדירה מערך פנימי של ייחוסים מטיפוס System.Object . המחלקה מגדילה את עצמה אוטומטית בעת הצורך, כברירת מחדל גודלה הראשוני הוא 16 מקומות, כאשר נוצר הצורך המערך גדל ב- 16 מקומות נוספים, ערכים אלו ניתנים לשינוי. מוגדרת במרחב השמות System.Collection . ניתן לרשת אותה על מנת ליצור מחלקת אוסף מתמחה (וזה אפילו מומלץ).
6
המחלקה ArrayList המאפיינים המרכזיים של ArrayList מאפיין תיאור Capasity
מכיל את גודלו הפיזי של המערך, מספר האלמנטים המקסימאלי שהוא יכול להכיל ללא הגדלתו, ברירת המחדל ברגע הקצאתו היא 16 . Count מספר האלמנטים הקיימים בפועל במערך, חייב להיות קטן או שווה ל- Capasity . IsFixedSize מאפיין בוליאני הבודק האם האובייקט מוגדר כבעל גודל קבוע, לא ניתן לשנות את גודלו של אובייקט כזה, אם כי ניתן לשנות את ערכי האינדקסים. IsReadOnly מאפיין בוליאני הבודק האם האובייקט מוגדר לקריאה בלבד, לא ניתן לשנות את גודלו או את ערכיו.
7
המחלקה ArrayList המתודות המרכזיות של ArrayList מתודה תיאור Add
מתודה וירטואלית המוסיפה אובייקט בודד לסוף המערך, מחזירה את האינדקס. AddRange מתודה וירטואלית המוסיפה מספר איברים בקריאה אחת, מצרפת מערך למערך הנוכחי. BinarySearch מתודה המממשת חיפוש בינארי ("ארי במדבר"), מתודה זו מועמסת מספר פעמים במחלקה. Clear מתודה וירטואלית המנקה את המערך מכל האלמנטים המוצבים בו, Count מתאפס, Capasity נשאר ללא שינוי. Contains מתודה בוליאנית הבודקת האם אובייקט נמצא במערך. חיפוש האובייקט הוא ליניארי, לכן במקרים רבים בהם המערך ממוין נעדיף להשתמש ב-BinarySearch(...)
8
המחלקה ArrayList המתודות המרכזיות של ArrayList - המשך
מתודה וירטואלית זו מחפשת האם האובייקט המתקבל כפרמטר נמצא במערך, מחזירה את האינדקס שלו במידה ונמצא, או -1 במידה והא אינו קיים במערך. IndexOf מתודה וירטואלית המוסיפה אלמנט חדש למערך במיקום מוגדר, שאר האלמנטים נדחפים למטה. Insert מתודה וירטואלית המחפשת ומסירה את המופע הראשון של האובייקט אשר נשלח כפרמטר, החיפוש הוא ליניארי. Remove מתודה וירטואלית המסירה מהמערך את האלמנט שמיקומו נשלח כפרמטר. RemoveAt מתודה וירטואלית ההופכת את הסדר של האלמנטים במערך. Reverse מתודה וירטואלית הממיינת את האלמנטים במערך. Sort מתאימה את גודלו של המערך למספר האלמנטים הקיימים בו בפועל, משפיעה על המאפיין Capacity . TrimToSize
9
המחלקה ArrayList דוגמה: ArrayList arr = new ArrayList();
arr.Add("Moshe"); arr.Add("David"); arr.Add("Yoram"); arr.Add("Yosi"); arr.Add("Dror"); foreach(string s in arr) Console.WriteLine(s); arr.Sort(); Console.WriteLine("Yoram positioned : {0}", arr.IndexOf("Yoram")); הוספת אובייקט לאוסף. הדפסת תוכן האוסף. מיון איברי האוסף. קבלת מיקומו של איבר באוסף.
10
המחלקה ArrayList דוגמה- המשך:
דוגמה- המשך: Console.WriteLine("Is Eran in my list? - {0}",arr.Contains("Eran")); arr.Insert(3,"Danny"); foreach(string s in arr) Console.WriteLine(s);. Console.WriteLine("count : {0}",arr.Count); Console.WriteLine("Size : {0}",arr.Capacity); arr.TrimToSize(); הוספת אובייקט חדש במיקום מוגדר. בדיקת גודל פיזי וגודל לוגי. התאמת גודל המערך למספר האלמנטים
11
מערכים מול אוספים. המחלקה ArrayList. המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
12
המחלקה Hashtable מחלקת אוסף שכיחה נוספת, מייצגת אוסף הטרוגני של אובייקטים. האובייקטים מאורגנים באמצעות מפתח (Key) וערך (Value) . הגישה לאובייקט היא באמצעות המפתח אשר חייב להיות ייחודי. כל אובייקט המוצב במחלקת אוסף זו מאוחסן באובייקט מהמבנה DictionaryEntry המכיל שני מאפיינים חשובים: Object Key ו- Object Value . הן המפתח והן הערך יכולים להיות מכל טיפוס. המפתח אינו יכול להיות null , הערך יכול להיות null . גם מחלקה זו ניתנת לגזירה על מנת להתאימה לצרכים של התוכנית.
13
המחלקה Hashtable דוגמה: ה- Hashtable יכיל אוסף של אובייקטים ממחלקה זו.
class Person { private readonly int m_ID; private string m_Name; public Person(int id, string name) { . . .} public int ID get { . . .} } public string Name ה- Hashtable יכיל אוסף של אובייקטים ממחלקה זו.
14
המחלקה Hashtable דוגמה - המשך: Hashtable hash = new Hashtable();
Person p = new Person(111,"Shoshana"); hash.Add(p.ID,p); p = new Person(112,"Yerachmiel"); hash.Add(p.ID,p);. p = new Person(113,"Zalman"); p = (Person)hash[111]; Console.WriteLine(p.Name); p = (Person)hash[112]; p = (Person)hash[113]; הוספת אובייקט ל- Hashtable. שליפת אובייקט מתוך Hashtable.
15
המחלקה Hashtable דוגמה - המשך: הדפסת המפתחות הדפסת הערכים
foreach(int i in hash.Keys) Console.WriteLine(i); foreach(Object obj in hash.Values) Console.WriteLine(((Person)obj).Name); הדפסת המפתחות הדפסת הערכים
16
מערכים מול אוספים. המחלקה ArrayList. המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
17
המחלקה Queue מייצגת אוסף אובייקטים הנשמר במבנה first-in, first-out collection. מגדירה מספר מתודות חשובות : Enqueue – הוספת אובייקט לסוף התור. Dequeue – הוצאת אובייקט מראש התורה. Peek – החזרת אובייקט מבלי להוציאו מראש התור. דוגמה: Queue q = new Queue(); q.Enqueue(12); q.Enqueue(13); q.Enqueue(14); q.Enqueue(15); q.Enqueue(16); q.Enqueue(17); הוספת ערכים לתור.
18
המחלקה Queue דוגמה - המשך int num; num = (int)q.Dequeue();
Console.WriteLine(num); שליפת אובייקטים מהתור.
19
מערכים מול אוספים. המחלקה ArrayList. המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
20
המחלקה Stack מגדירה מספר מתודות חשובות : דוגמה: Stack s = new Stack();
מייצגת אוסף אובייקטים הנשמר במבנה Last-in, first-out collection. מגדירה מספר מתודות חשובות : Push – הוספת אובייקט לראש המחסנית. Pop – הוצאת אובייקט מראש המחסנית. Peek – החזרת אובייקט מבלי להוציאו מראש המחסנית. דוגמה: Stack s = new Stack(); s.Push(12); s.Push(13); s.Push(14); s.Push(15); s.Push(16); s.Push(17); הוספת אובייקטים למחסנית.
21
שליפת אובייקטים מהמחסנית.
המחלקה Stack דוגמה – המשך int num; num = (int)s.Pop(); Console.WriteLine(num); שליפת אובייקטים מהמחסנית.
22
מערכים מול אוספים. המחלקה ArrayList. המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית.
23
אוספים מותאמים אישית הטיפול וההתנהגויות של מחלקה המטפלת באובייקט יחיד שונה לחלוטין מהטיפול וההתנהגויות הנדרשות מאוסף אובייקטים. בדרך כלל כתיבת מחלקה המטפלת ביחיד מחייבת כתיבת מחלקה המטפלת באוסף אובייקטים. לדוגמה : מהמחלקה Circle ניתן להקצות אובייקטים המטפלים באובייקט עיגול המצוייר על המסך, ההתנהגויות יכולות להיות : איתחול האובייקט, שינוי מיקום, שינוי גודל, שינוי צבע, חישוב שטח וכו'. אם נרצה לצייר על המסך מספר עיגולים, נגדיר מחלקה שתטפל באוסף עיגולים (CircleArr), ההתנהגויות יכולות להיות : הוסף אובייקט עיגול, הסר אובייקט עיגול, צייר את כולם, חפש אובייקט על פי רדיוס או על פי צבע וכו'.
24
אוספים מותאמים אישית ניתן לייצר מחלקת אוסף מותאמת בשני דרכים:
כתיבת מחלקה המכילה מחלקת אוסף. כתיבת מחלקה היורשת מחלקת אוסף. הכלה class CircleArr { private ArrayList m_Arr; . . . } class CircleArr : ArrayList { . . . } הורשה
25
אוספים מותאמים אישית דוגמה - מחלקת אוסף ביחסי הכלה:
נתונה המחלקה Circle המטפלת באובייקט עיגול יחיד: class Circle { private Point m_Location; private int m_Radius; public Circle(int x, int y, int r) {. . .} public void SetLocation(int x, int y) { . . .} public void SetSize(int r) {. . .} public void Print() {. . .} }
26
אוספים מותאמים אישית דוגמה - מחלקת אוסף ביחסי הכלה: class CircleArr {
private ArrayList m_Arr; public CircleArr() m_Arr = new ArrayList(); } public void Add(Circle c) m_Arr.Add(c);
27
אוספים מותאמים אישית דוגמה - מחלקת אוסף ביחסי הכלה - המשך:
public void Remove(Circle c) { m_Arr.Remove(c); } public void Print() foreach (Circle c in m_Arr) c.Print();
28
אוספים מותאמים אישית דוגמה - מחלקת אוסף ביחסי הורשה
class CircleArr:ArrayList { public override int Add(object value) if (!(value is Circle)) return -1; return base.Add(value); } public override void AddRange(ICollection c) foreach(Object obj in c) if (!(obj is Circle)) return; base.AddRange(c); public void Print() foreach (Circle c in this) c.Print();
29
אוספים - Collections עריכה מקצועית : ארז קלר. www.corner.co.il
מערכים מול אוספים. המחלקה ArrayList המחלקהHashtable . המחלקה Queue. המחלקה Stack. אוספים מותאמים אישית. עריכה מקצועית : ארז קלר.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.