Download presentation
Presentation is loading. Please wait.
Published byἸεζάβελ Δελή Modified over 6 years ago
1
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עריכה ועיצוב: קרן הרדי
2
המשימה: מיון Class Sorter static void Sort (int[ ] arr)
static void Sort (double[] arr) static void Sort (string[] arr) static void Sort (Date[] arr) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
3
המשימה:מיון – selection sort
minNum 1 3 3 3 5 5 5 5 1 1 1 5 1 3 5 1 5 1 1 1 4 4 4 4 4 4 4 4 4 4 5 5 5 3 3 3 3 3 5 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים placeIndex 3 2 1
4
המשימה: מיון – selection sort
public static void Sort(int[] arr){ // the index of the minimum int minIndex; //while the unsorted part is not last place in list: for (int placeIndex = 0; placeIndex < arr.length-1; placeIndex++){ minIndex = findMinIndex(arr, placeIndex); swap(arr, minIndex, placeIndex); } //end of for } //end of method המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב
5
המשימה: מיון – selection sort
//swaps the arr[index1] with arr[index2] private static void Swap (int[] arr, int index1, int index2){ int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } //search for the index of smallest number in the unsorted part of list: private static int FindMinIndex(int[] arr, int placeIndex){ int minimum = arr[placeIndex]; int minIndex = placeIndex; for(int i = placeIndex+1; i < arr.Length; i++){ if (arr[i]<minimum){ minimum = arr[i]; minIndex = i; return minIndex; המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב
6
המשימה: מיון – selection sort
/** This is a helper class that helps to sort arrays */ public class Sorter{ … /** sorts an array of integers from top to bottom */ public static void Sort (int[] arr){ } /** sorts an array of Strings by lexicographical order */ public static void Sort(string[ ] arr){ המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
7
מיון מחרוזות public static void Sort(int[] arr){ int minIndex; //while the unsorted part is not last place in list: for (int placeIndex = 0; placeIndex < arr.Length-1; placeIndex++){ minIndex = FindMinIndex(arr, placeIndex); Swap(arr, minIndex, placeIndex); } //end of for } //end of method (string[] arr){ המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
8
המשימה: מיון – selection sort
//swaps the arr[index1] with arr[index2] private static void Swap (int[] arr, int index1, int index2){ int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] =temp; } //search for smallest number in the unsorted part of list: private static int FindMinIndex(int[] arr, int index){ int minimum = arr[placeIndex]; int minIndex = placeIndex; for(int i= placeIndex; i<arr.length; i++){ if (arr[i] < minimum){ minimum = arr[i]; minIndex =i; return minIndex; (string[] arr, string (string[] arr, string המרכז להוראת המדעים © האוניברסיטה העברית בירושלים < ?????? המרכז להוראת המדעים, סתיו תשס"ב
9
? מה משותף ל: string, int , double , Date ?
האלמנט המשותף... ? מה משותף ל: string, int , double , Date ? ! כולם יכולים לתפקד כניתנים להשוואה (ולכן ניתן למיין אותם!) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
10
המטרה ברקע... static void Sort(Comparable[ ] arr) Sort(Date[ ] arr)
Sort(String[ ] arr) Sort(double[ ] arr) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים Sort(int[ ] arr) המרכז להוראת המדעים, סתיו תשס"ב
11
ממשקים בc# ממשק (interface): אוסף הצהרות על שיטות
(ללא מימוש) המגדירות טיפוס התנהגות. ממשק יכול להכיל גם הצהרה על קבועים. מחלקות שונות יכולות לממש את הממשק. המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב
12
דוגמה: הגדרת ממשק חדש public interface Comparable{ }
public bool IsLessThan (Object o); public bool IsEqualTo(Object o); המרכז להוראת המדעים © האוניברסיטה העברית בירושלים הגדרת שיטותללא מימוש המרכז להוראת המדעים, סתיו תשס"ב
13
מימוש ממשקים – זכויות וחובות
חובות המחלקה המממשת מימוש ממשק מהווה חתימה על חוזה: על מחלקה שמממשת אותו לממש את כל שיטות הממשק, על פי חתימתן המדויקת. המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
14
דוגמה: מימוש הממשק public class Date : Comparable{ private int day;
private int month; private int year; … public bool IsEqual (Object o){ Date d2 = (Date)o; return (d2.day = = this.day) && (d2.month = = this.month) &&(d2.year = = this.year); } הממשק אותו המחלקה מממשת המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
15
מימוש ממשקים – זכויות וחובות
זכויות המחלקה המממשת מקבלת את כל הקבועים של הממשק ניתן להמיר כלפי מעלה לטיפוס הממשק מחלקה יכולה לממש מספר רב של ממשקים המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב
16
! ממשק אינו מחלקה. לא ניתן ליצור ממנו עצמים
המרות לטיפוס ממשק Comparable comp = new Comparable( ) Date myBirthDay = new Date(30,9,1976); Turtle t1 = new Turtle( ); Comparable comp = myBirthday; Comparable comp = t1; ! ממשק אינו מחלקה. לא ניתן ליצור ממנו עצמים המרכז להוראת המדעים © האוניברסיטה העברית בירושלים חוקי: המרה כלפי מעלה, לממשק שהמחלקה מממשת ! המחלקה Trutle אינה מממשת את Comparable המרכז להוראת המדעים, סתיו תשס"ב
17
הממשק כטיפוס מכיר רק את שיטות הממשק
Date myBirthDay = new Date(30,9,1976); Comparable comp1 = myBirthday; comp1.isEqualTo(myBirthday); comp1.getDay( ); ((Date)comp1).getDay( ); חוקי: פנייה לשיטה של הממשק דרך טיפוס הממשק ! הממשק Comparable לא מכיר את השיטה המרכז להוראת המדעים © האוניברסיטה העברית בירושלים חוקי: המרה כלפי מטה, בטרם פנינו לשיטה getDay( ) המרכז להוראת המדעים, סתיו תשס"ב
18
מימוש של מספר מחלקות, וירושה:
I, J, K הם ממשקים B היא מחלקה public class A public class A : I public class A : I, J, K public class A : B , I, J, K מחלקה מממשת ממשק מחלקה יכולה לממש מספר ממשקים המרכז להוראת המדעים © האוניברסיטה העברית בירושלים מחלקה יורשת ומממשת ממשקים (אין קשר) המרכז להוראת המדעים, סתיו תשס"ב
19
ממשקים ופולימורפיזם: מיון בגירסה כללית
public static void Sort(Comparable[] arr){ int minIndex; //while the unsorted part is not last place in list: for (int placeIndex = 0; placeIndex < arr.length-1; placeIndex++){ minIndex = FindMinIndex (arr, placeIndex); Swap (arr, minIndex, placeIndex); } //end of for } //end of method המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
20
ממשקים ופולימורפיזם: מיון בגירסה כללית
//swaps the arr[index1] with arr[index2] private static void Swap (Comparable[] arr, int index1, int index2){ Comparable temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } //search for smallest number in the unsorted part of list: private static int FindMinIndex (Comparable[] arr, int placeIndex){ Comparable minimum = arr[placeIndex]; int minIndex = placeIndex; for (int i = placeIndex; i<arr.length; i++){ if (arr[i].IsLessThan(minimum)){ minimum = arr[i]; minIndex = i; return minIndex; המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב
21
המטרה הושגה! static void Sort(Comparable[ ] arr)
SortDates(Date[ ] dates) static void Sort(Comparable[ ] arr) SortStrings(String[ ] names) SortDouble(double[ ] arr) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים SortInts(int[ ] arr) המרכז להוראת המדעים, סתיו תשס"ב
22
שימוש בשיטה הכללית: public static void Main (string[] args){ string[] strArr = {“Yoel”, ”Sara”, “Moshe”}; Sorter.Sort(strArr); for (int i = 0; i < strArr.length ; i++){ Console.WriteLine (strArr[i] ); } המרכז להוראת המדעים © האוניברסיטה העברית בירושלים
23
ירושה מול ממשקים: מי ומתי?
ירושה מול ממשקים: מי ומתי? A תת מחלקה של המחלקה B A מממשת את הממשק I מייצג יחס "סוג של" (עיגול הוא סוג של צורה) מייצג יחס "מתפקד כ" (עיגול מתפקד כ"ניתן להשוואה" " ניתן לציור" וכו') ניתן לרשת רק ממחלקה אחת (בC# אין ירושה מרובה) מחלקה אחת יכולה לממש ממשקים רבים המרכז להוראת המדעים © האוניברסיטה העברית בירושלים ניתן להגדיר בB שיטות ותכונות (גם אם B מופשטת) ב- I ניתן להגדיר רק קבועים ושיטות לא ממומשות B מייצגת את הפן העיקרי של A I מייצג רק פן אחד (אולי מתוך רבים) של A המרכז להוראת המדעים, סתיו תשס"ב
24
UML Comparable (interface) string המרכז להוראת המדעים ©
האוניברסיטה העברית בירושלים string
25
תודה על ההקשבה קרן הרדי המרכז להוראת המדעים ©
האוניברסיטה העברית בירושלים קרן הרדי
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.