Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

2 2 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המשימה : מיון מיזוג Class Sorter static void mergeSort(int [ ] arr) static void mergeSort(double[] arr) static void mergeSort (String[] arr) static void mergeSort(Date[] arr)

3 3 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המשימה : מיון – merge sort public static void mergeSort(int[] arr){ if (arr.length > 1){ int[] left = new int[arr.length/2]; System.arraycopy(arr, 0, left, 0, left.length); int[] right = new int[arr.length-left.length]; System.arraycopy(arr, left.length, right, 0, right.length); mergeSort(left); mergeSort(right); merge(left, right, arr); } } //end of method

4 4 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים private static void merge(int[] left, int[] right, int[] whole){ int leftIndex = 0; int rightIndex = 0; int wholeIndex = 0; while (leftIndex < left.length && rightIndex < right.length){ if (left[leftIndex] < right[rightIndex]) { whole[wholeIndex] = left[leftIndex]; leftIndex++; } else { whole[wholeIndex] = right[rightIndex]; rightIndex++; } wholeIndex++; } המשימה : מיזוג – merge

5 5 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים while (leftIndex < left.length) whole[wholeIndex] = left[leftIndex]; leftIndex++; wholeIndex++; } while (rightIndex < right.length){ whole[wholeIndex] = right[rightIndex]; rightIndex++; wholeIndex++; } } המשימה : מיזוג – merge

6 6 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המשימה : מיון – merge 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 mergeSort(int [] arr){ … } /** sorts an array of Strings by lexicographical order */ public static void mergeSort(String[ ] arr){ … } … }

7 7 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המשימה : מיון – merge sort /** This is a helper class that helps to sort arrays */ public class Sorter{ … /** sorts an array of Date by hronological order */ public static void mergeSort(Date[ ] arr){ … } … }

8 8 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים מיון מחרוזות public static void mergeSort (int[] arr){ if (arr.length > 1){ int[] left = new int[arr.length/2]; System.arraycopy(arr, 0, left, 0, left.length); int[] right = new int[arr.length-left.length]; System.arraycopy(arr, left.length, right, 0, right.length); mergeSort(left); mergeSort(right); merge(left, right, arr); } } //end of method (String[] arr){ String[] left = new String[arr.length/2]; String[] right = new String[arr.length-left.length];

9 9 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים private static void merge(int[] left, int[] right, int[] whole){ int leftIndex = 0; int rightIndex = 0; int wholeIndex = 0; while (leftIndex < left.length && rightIndex < right.length){ if (left[leftIndex] < right[rightIndex]) { whole[wholeIndex] = left[leftIndex]; leftIndex++; } else { whole[wholeIndex] = right[rightIndex]; rightIndex++; } wholeIndex++; } המשימה : מיזוג – merge (String[] left, String[] right, String[] whole){ <??????

10 10 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים while (leftIndex < left.length) whole[wholeIndex] = left[leftIndex]; leftIndex++; wholeIndex++; } while (rightIndex < right.length){ whole[wholeIndex] = right[rightIndex]; rightIndex++; wholeIndex++; } המשימה : מיזוג – merge

11 11 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים האלמנט המשותף... ? מה משותף ל : String, int, double, Date ? ! כולם יכולים לתפקד כניתנים להשוואה ( ולכן ניתן למיין אותם !)

12 12 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים האלמנט המשותף... ניתן ליצור מערך העצמים המממשים כולם אותן ממשק ניתנים להשוואה - Comparable. Comparable[] compArray = new Comparable[4]; חוקי : במערך יכולים להיות מופעים של מחלקות הממשות את הממשק Comparable כל העצמים של המערך יכולים לתפקד כ - ניתנים להשוואה, לדוגמה :

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

14 14 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המטרה ברקע... mergeSort(Integer[ ] arr) mergeSort(Double[ ] arr) mergeSort(String[ ] arr) mergeSort(Date[ ] arr) static void mergeSort(Comparable[ ] arr)

15 15 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המטרה ברקע... merge(Integer[ ] left, Integer[ ] right, Integer[ ] whole) merge(Double[ ] left, Double[ ] right, Double[ ] whole) merge(String[ ] left, String[ ] right, String[ ] whole) merge(Date[ ] left, Date[ ] right, Date[ ] whole) static void merge(Comparable[ ] left, Comparable[ ] right, Comparable[ ] whole)

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

17 17 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים דוגמה : הגדרת ממשק חדש public interface Comparable{ /** * Returns a negative integer, zero, or a positive integer * as this object is less than, equal to, or greater than the specified object. */ } public int compareTo(Object o); הגדרת ממשק שם הממשק הגדרת שיטה ללא מימוש

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

19 19 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים דוגמה : מימוש הממשק public class Date implements Comparable{ private int day; private int month; private int year; … … } הממשק אותו המחלקה מממשת המילה השמורה implements

20 20 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים דוגמה : מימוש הממשק public class Date implements Comparable{ /** * Returns a negative integer, zero, or a positive integer * as this date is less than, equal to, or greater than the specified date. */ public int compareTo(Object o){ Date d = (Date)o; if (d.year > this.year ) return -1; if (d.year < this.year ) return 1; if (d.month > this.month) return -1; if (d.month < this.month) return 1; return this.day - d.day ; } }

21 21 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים דוגמה : מימוש הממשק public class Integer implements Comparable{ } /** * Returns a negative integer, zero, or a positive integer * as this object is less than, equal to, or greater than the specified object. */ public int compareTo(Object o){ int val = ((Integer)o).getValue( ); return this.value - val; } private int value; public Integer( int val){ this.value = val; } public int getValue( ){ return value; }

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

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

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

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

26 26 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים ממשקים ופולימורפיזם : מיון מיזוג בגירסה כללית public static void mergeSort(Comparable[] arr){ Comparable[] left = new Comparable[arr.length/2]; System.arraycopy(arr, 0, left, 0, left.length); Comparable[] right = new Comparable[arr.length-left.length]; System.arraycopy(arr, left.length, right, 0, right.length); mergeSort(left); mergeSort(right); merge(left, right, arr); } //end of method

27 27 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים private static void merge(Comparable[] left, Comparable[] right, Comparable [] whole){ int leftIndex = 0; int rightIndex = 0; int wholeIndex = 0; while (leftIndex < left.length && rightIndex < right.length){ if (left[leftIndex].compareTo(right[rightIndex])<0) { whole[wholeIndex] = left[leftIndex]; leftIndex++; } else { whole[wholeIndex] = right[rightIndex]; rightIndex++; } wholeIndex++; } ממשקים ופולימורפיזם : מיזוג בגירסה כללית

28 28 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים while (leftIndex < left.length) whole[wholeIndex] = left[leftIndex]; leftIndex++; wholeIndex++; } while (rightIndex < right.length){ whole[wholeIndex] = right[rightIndex]; rightIndex++; wholeIndex++; } ממשקים ופולימורפיזם : מיזוג בגירסה כללית

29 29 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים המטרה הושגה ! mergeSort (Integer[ ] arr) mergeSort (Double[ ] arr) mergeSort (String[ ] names) mergeSort (Date[ ] dates) static void mergeSort(Comparable[ ] arr)

30 30 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים שימוש בשיטה הכללית: 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.mergeSort(strArr); Sorter.mergeSort(intArr); for (int i = 0; i < intArr.length ; i++){ System.out.println (strArr[i] + “-” + intArr[i]); }

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

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

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


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

Similar presentations


Ads by Google