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

Slides:



Advertisements
Similar presentations
Object Oriented 33 MCSD DORON AMIR
Advertisements

ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Lab class 10: 1. Analyze and implement the following merge-sorting program. //import java.lang.*; public class MergeSorter { /** * Sort the elements of.
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
האוניברסיטה העברית בירושלים
Interface ממשקים 1. ראינו כי ניתן לשמור אובייקטים במערכים באותו אופן כמו משתנים רגילים. ננסה כעת לראות כיצד למיין מערך של אובייקטים מסוג מסוים. נשתמש.
1 תוכנה 1 תרגול 14 – סיכום. 2 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public.
תרגול 11 המשך תכנות מונחה עצמים 1. היום בתרגול מחלקות אבסטרקטיות ממשקים אופרטור instanceof 2.
Quick Sorting -Ed. 2. and 3.: Chapter 10 -Ed. 4.: Chapter 11.
Sorting Part 3 CS221 – 3/6/09. Sort Matrix NameWorst Time Complexity Average Time Complexity Best Time Complexity Worst Space (Auxiliary) Selection SortO(n^2)
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
Copyright © 2006 Pearson Addison-Wesley. All rights reserved. Sorting II 1 An Introduction to Sorting.
אוניברסיטת בן גוריון - מבוא למדעי המחשב 1 תרגול מספר 10  ממשקים o כללים בסיסיים o מימוש מספר ממשקים o דוגמת ממשק כחוזה  הורשה o כללים בסיסיים o דריסה.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים 1 הפניות.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Introduction to Searching and Sorting
Programming 2 LAB TA: Nouf Al-Harbi NoufNaief.net :::
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 7 ISP דוגמא נוספת.
1 Abstract Classes האם קיים אובייקט בשם רהיט? האם קיים אובייקט בשם כלי תחבורה? האם קיים אובייקט בשם כלי כתיבה? האם קיים אובייקט בשם אדם? האם קיים אובייקט.
תוכנה 1 תבנית העיצוב Observer 1 שחר מעוז בית הספר למדעי המחשב אוניברסיטת תל אביב.
CS 2430 Day 9. Announcements Quiz on Friday, 9/28 Prog1: see , see me as soon as possible with questions/concerns Prog2: do not add any public methods.
SortingBigOh Sorting and "Big Oh" Adapted for ASFA from a presentation by: Barb Ericson Georgia Tech Aug 2007 ASFA AP Computer Science.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
תכנון השעור מבוסס על שאלה 3 במבחן המסכם ( מועד א ' ) 2010.
CSE 341 Lecture 4 merge sort; basic efficiency issues Ullman slides created by Marty Stepp
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
ADSA: Generics/ Advanced Data Structures and Algorithms Objective –to describe basic forms of generic classes, interfaces, and methods for searching.
© 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Data Structures for Java William H. Ford William R. Topp Chapter 5 Generic.
1 תרגול 11: Design Patterns ומחלקות פנימיות 1 תוכנה 1.
תרגול 12: Iterator מחסנית תור 1. מחסנית (stack) מחסנית (stack) היא מבנה נתונים שמזכיר מחסנית של רובה : האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון (LIFO.
1 CSE 373 Sorting 3: Merge Sort, Quick Sort reading: Weiss Ch. 7 slides created by Marty Stepp
Objects & Classes Weiss ch. 3. So far: –Point (see java.awt.Point) –String –Arrays of various kinds –IPAddress (see java.net.InetAddress) The Java API.
Contest Algorithms January 2016 Pseudo-code for divide and conquer, and three examples (binary exponentiation, binary search, and mergesort). 5. Divide.
תרגול 10 המשך תכנות מונחה עצמים 1. היום בתרגול פולימורפיזם כללי הרשאות בהורשה מחלקות אבסטרקטיות 2.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
Building Java Programs Chapter 13 Sorting reading: 13.3, 13.4.
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
מחרוזות – הטיפוס String
האוניברסיטה העברית בירושלים
Lecture 25: Searching and Sorting
תרגול 7: מנשקים, פולימורפיזם ועוד
Object Oriented Programming
תרגול מספר 9.
Object Oriented Programming
Operators Overloading
תרגול 7: מנשקים, פולימורפיזם ועוד
Object Oriented Programming
מחלקות classes.
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים בשפת JAVA
ממשקים - interfaces איך לאפשר "הורשה מרובה".
בניית מחסנית סטטית Static Stack Implementation מורים מובילים תשע"ה
תכנות מכוון עצמים ושפת JAVA
תוכנה 1 תרגול 13 – סיכום.
תרגול 11 המשך תכנות מונחה עצמים.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
slides adapted from Marty Stepp
אם גודל המערך arr גדול מ-1 בצע: מיון-מיזוג(left) מיון-מיזוג(right)
Workshop for CS-AP Teachers
Presentation transcript:

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

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

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

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

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

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

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

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

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 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים ממשקים בג ' אווה ממשק (interface): אוסף הצהרות על שיטות ( ללא מימוש ) המגדירות טיפוס התנהגות. ממשק יכול להכיל גם הצהרה על קבועים. מחלקות שונות יכולות לממש את הממשק.

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

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

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

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

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

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

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

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