Presentation is loading. Please wait.

Presentation is loading. Please wait.

האוניברסיטה העברית בירושלים

Similar presentations


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

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

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 3 1 3 3 1 5 5 5 5 1 5 5 5 1 1 1 1 3 1 1 4 4 4 4 4 4 4 4 4 4 5 5 5 3 3 3 3 3 5 placeIndex 2 3 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 ? ! כולם יכולים לתפקד כניתנים להשוואה (ולכן ניתן למיין אותם!) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

10 האוניברסיטה העברית בירושלים
המטרה ברקע... sort(Date[ ] arr) static void sort(Comparable[ ] arr) sort(String[ ] arr) sort(double[ ] arr) sort(int[ ] arr) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

11 האוניברסיטה העברית בירושלים
ממשקים בג'אווה ממשק (interface): אוסף הצהרות על שיטות (ללא מימוש) המגדירות טיפוס התנהגות. ממשק יכול להכיל גם הצהרה על קבועים. מחלקות שונות יכולות לממש את הממשק. המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

12 האוניברסיטה העברית בירושלים
דוגמה: הגדרת ממשק חדש public interface Comparable{ } שם הממשק הגדרת ממשק public boolean isLessThan (Object o); public boolean isEqualTo(Object o); הגדרת שיטות ללא מימוש המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

13 האוניברסיטה העברית בירושלים
מימוש ממשקים – זכויות וחובות חובות המחלקה המממשת מימוש ממשק מהווה חתימה על חוזה: על מחלקה שמממשת אותו לממש את כל שיטות הממשק, על פי חתימתן המדויקת. המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

14 האוניברסיטה העברית בירושלים
דוגמה: מימוש הממשק public class Date implements Comparable{ private int day; private int month; private int year; public boolean isEqual (Object o){ Date d2 = (Date)o; return (d2.day = = this.day) && (d2.month = = this.month) &&(d2.year = = this.year); } המילה השמורה implements הממשק אותו המחלקה מממשת המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

15 האוניברסיטה העברית בירושלים
דוגמה: מימוש הממשק public class Integer implements Comparable{ } /** returns true iff this Integer Object is smaller than given one*/ public boolean isLessThan (Object o){ int val2 = ((Integer)o).getValue( ); return this.value < val2; } public boolean isEqualTo (Object o){ int val2 = ((Integer)o).getValue( ); return this.value = = val2; //attributes: private int value; public Integer( int val){ this.value = val; } public int getValue( ){ return value; המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

16 האוניברסיטה העברית בירושלים
מימוש ממשקים – זכויות וחובות זכויות המחלקה המממשת מקבלת את כל הקבועים של הממשק ניתן להמיר כלפי מעלה לטיפוס הממשק מחלקה יכולה לממש מספר רב של ממשקים המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

17 האוניברסיטה העברית בירושלים
המרות לטיפוס ממשק Comparable comp = new Comparable( ) Date myBirthDay = new Date(30,9,1976); Turtle t1 = new Turtle( ); Comparable comp = myBirthday; Comparable comp = t1; ! ממשק אינו מחלקה. לא ניתן ליצור ממנו עצמים חוקי: המרה כלפי מעלה, לממשק שהמחלקה מממשת ! המחלקה Trutle אינה מממשת את Comparable המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

18 האוניברסיטה העברית בירושלים
הממשק כטיפוס מכיר רק את שיטות הממשק Date myBirthDay = new Date(30,9,1976); Comparable comp1 = myBirthday; comp1.isEqualTo(myBirthday); comp1.getDay( ); ((Date)comp1).getDay( ); חוקי: פנייה לשיטה של הממשק דרך טיפוס הממשק ! הממשק Comparable לא מכיר את השיטה חוקי: המרה כלפי מטה, בטרם פנינו לשיטה getDay( ) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

19 מימוש של מספר מחלקות, וירושה:
public class A public class A implements I public class A implements I, J, K public class A extends B implements I, J, K מחלקה מממשת ממשק מחלקה יכולה לממש מספר ממשקים מחלקה יורשת ומממשת ממשקים (אין קשר) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

20 ממשקים ופולימורפיזם: מיון בגירסה כללית
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 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

21 ממשקים ופולימורפיזם: מיון בגירסה כללית
//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; המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

22 האוניברסיטה העברית בירושלים
המטרה הושגה! sortDates(Date[ ] dates) static void sort(Comparable[ ] arr) sortStrings(String[ ] names) sortDouble(double[ ] arr) sortInts(int[ ] arr) המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

23 האוניברסיטה העברית בירושלים
שימוש בשיטה הכללית: public static void main (String[] args){ String[] strArr = {“Yoel”, ”Sara”, “Moshe”}; Integer[] intArr = new Integer[3]; intArr[0] = new Integer (7); intArr[1] = new Integer (14)’ intArr[2] = new Integer (“9”); Sorter.sort(strArr); Sorter.sort(intArr); for (int i = 0; i < intArr.length ; i++){ System.out.println (strArr[i] + “-” + intArr[i]); } המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

24 ירושה מול ממשקים: מי ומתי?
ירושה מול ממשקים: מי ומתי? A תת מחלקה של המחלקה B A מממשת את הממשק I מייצג יחס "סוג של" (עיגול הוא סוג של צורה) מייצג יחס "מתפקד כ" (עיגול מתפקד כ"ניתן להשוואה" " ניתן לציור" וכו') ניתן לרשת רק ממחלקה אחת (בג'אווה אין ירושה מרובה) מחלקה אחת יכולה לממש ממשקים רבים גם אם B מופשטת, ניתן להגדיר בה שיטות ותכונות ב- I ניתן להגדיר רק קבועים ושיטות לא ממומשות B מייצגת את הפן העיקרי של A I מייצג רק פן אחד (אולי מתוך רבים) של A המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המרכז להוראת המדעים, סתיו תשס"ב

25 האוניברסיטה העברית בירושלים
UML Comparable (interface) Double המרכז להוראת המדעים © האוניברסיטה העברית בירושלים

26 האוניברסיטה העברית בירושלים
מה כבר קיים ? – Java API Comparable - מה ההבדל בין Java API לשלנו? מי מממש אותו ? המרכז להוראת המדעים © האוניברסיטה העברית בירושלים


Download ppt "האוניברסיטה העברית בירושלים"

Similar presentations


Ads by Google