תכנות מכוון עצמים ושפת JAVA

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

Object Oriented 33 MCSD DORON AMIR
ממיבחניםC שאלות ++.
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
האוניברסיטה העברית בירושלים
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
המשך תכנות מונחה עצמים 1. היום בתרגול  הורשה  שיטות מיוחדות  פולימורפיזם 2.
תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב.
ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
תרגול 12: Iterator מחסנית תור 1. מחסנית (stack) מחסנית (stack) היא מבנה נתונים שמזכיר מחסנית של רובה : האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון (LIFO.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
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];
תוכנה 1 בשפת Java תרגול מספר 9: נושאים שונים בהורשה אסף זריצקי ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב.
Java Reflection הוכן על-ידי אחמד ג'בארה
מחרוזות – הטיפוס String
תכנות מכוון עצמים ושפת JAVA מ- C++ ל- JAVA
האוניברסיטה העברית בירושלים
© Keren Kalif JDBC קרן כליף.
תרגול 7: מנשקים, פולימורפיזם ועוד
Programming Arrays.
Object Oriented Programming
תכנות מכוון עצמים ו- C++ יחידה 05 init line, this, contained class, friend, static קרן כליף.
Tirgul 12 Trees 1.
Object Oriented Programming
תכנות מכוון עצמים ו- C++ יחידה 11 תבניות - templates
Operators Overloading
Formal Specifications for Complex Systems (236368) Tutorial #1
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
Object Oriented Programming
תרגול 7: מנשקים, פולימורפיזם ועוד
Object Oriented Programming
מבוא לתכנות מונחה עצמים Object Oriented Programming
תכנות מונחה עצמים.
מצביעים קרן כליף.
SQL בסיסי – הגדרה אינדוקטיבית
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים ו- C++ יחידה 04 constructors, destructor
תכנות מכוון עצמים ו- C++ יחידה 08 פולימורפיזם
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים בשפת JAVA
ממשקים - interfaces איך לאפשר "הורשה מרובה".
© Keren Kalif Servlet קרן כליף.
תיאוריית תכנון סכמות למסדי נתונים יחסיים חלק 4
אובייקטים ומחלקות קרן כליף.
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
סוגי משתנים קרן כליף.
הכמסה – Encapsulation עקרון ההכמסה
מחרוזות קרן כליף.
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ו- C++ יחידה 02 העמסת פונקציות, ערכי ברירת מחדל, enum, קימפול מותנה קרן כליף.
הכלת אובייקטים קרן כליף.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

תכנות מכוון עצמים ושפת JAVA הרצאה 08 המחלקה Object © Keren Kalif

ביחידה זו נלמד: toString getClass equals hashCode המחלקה Object דריסת השיטות toString ו- equals

המחלקה object המחלקה Object ב- JAVA אינה מכילה תכונות, אלא אוסף שיטות בסיסיות, שמתוכן נתמקד ב- 3 שהיה נחמד אם הן היו לכל אובייקט: equals, getClass, toString, hashCode ב- JAVA כל מחלקה שאינה יורשת ממחלקה מסוימת, יורשת מהמחלקה Object, גם ללא ציון מפורש של ירושה כלומר, כל מחלקה יורשת בסופו של דבר מ- Object לכן כל פעם שנפתחה לנו רשימת השיטות של אובייקט מסוים ראינו גם את שיטות אלו

ליד כל שיטה ניתן לראות באיזו מחלקה נמצא המימוש בו הקומפיילר ישתמש המחלקה object ליד כל שיטה ניתן לראות באיזו מחלקה נמצא המימוש בו הקומפיילר ישתמש

השיטה toString שיטה זו אינה מקבלת פרמטרים ומחזירה את השם המלא של הטיפוס ממנו נוצר האובייקט למשל, עבור המחלקה Person: public static void main(String[] args) { Person p = new Person(111, "momo"); System.out.println(p.toString()); System.out.println(p); } הדפסה של אובייקט תפעיל את השיטה toString באופן אוטומטי, לכן שתי השורות הנ"ל שקולות

דריסת השיטה toString השיטה toString נועדה להידרס (override) ע"י מחלקה יורשת ולהחזיר מחרוזת המייצגת את נתוני האובייקט עד היום עשינו זאת ע"י כתיבת השיטה toString, אך לא ידענו שאנחנו דורסים שיטה שמומשה בבסיס השימוש ימשיך להיות זהה דוגמא עבור המחלקה Person: class Person { … public String toString() { return "Id: " + id + "\tName: " + name; } public static void main(String[] args) { Person p1 = new Person(111, "momo"); System.out.println(p1.toString()); }

השיטה getClass שיטה זו מחזירה אובייקט מטיפוס Class המכיל נתונים על המחלקה לא ניתן לדרוס שיטה זו (מוגדרת כ- final) האובייקט Class מכיל שיטות עם נתונים על המחלקה עצמה למשל: getName: שיטה המחזירה את שם המחלקה getSuperClass: מחזירה אובייקט מטיפוס Class על האבא

דוגמא

הבודק שוויון בין הפניות, ולא בתוכן השיטה equals מקבלת כפרמטר איזשהו אובייקט ממחלקת object (ולכן יכולה לקבל כל אובייקט), ומחזירה true אם שניהם מצביעים לאותו אובייקט, false אחרת. id=111 name=“momo” public static void main(String[] args) { Person p1 = new Person(111, "momo"); Person p2 = new Person(111, "momo"); Person p3 = p1; System.out.println("p1 equals p2? “ + p1.equals(p2)); System.out.println("p1 equals p3? “ + p1.equals(p3)); System.out.println("p2 equals p3? “ + p2.equals(p3)); } id=111 name=“momo” F T F מימוש השיטה equals למעשה זהה לאופרטור == הבודק שוויון בין הפניות, ולא בתוכן

דריסת השיטה equals ראינו כי מימוש ה- default של השיטה equals בודק האם ההפניות של 2 אובייקטים זהות השיטה equals נועדה להידרס ע"י המחלקה היורשת ולבדוק האם ערכי תכונות האובייקט שהועבר כפרמטר זהות לערכי התכונות של this, ולא לבדוק רק הפניות

דריסת השיטה equals – דוגמת מימוש למחלקה Person השיטה מקבלת פרמטר מטיפוס Object, כלומר בפועל ניתן להעביר פרמטר מכל טיפוס הפרמטר שהשיטה מקבלת במידה ו- other אינו מסוג כלשהו של Person התשובה תהייה false, שכן במקרה זה ברור ש- other ו- this אינם זהים. שם השיטה הנדרסת public boolean equals(Object other) { if (!(other instanceof Person)) return false; Person p = (Person)other; return p.id == id && p.name.equals(name); } מאחר ו- other הוא הפניה של Object, אין לו את התכונות של Person, ולכן צריך לעשות casting. נחזיר את תשובת שוויון ערכי התכונות

דריסת השיטה equals – דוגמת מימוש למחלקה Student חלק זה קורא ל- equals של Person שיבצע את הבדיקה על שדות הבסיס. במידה ואין שוויון בערכי תכונות הבסיס, ישר ניתן לדעת שהאובייקטים אינם זהים ונחזיר false. אחרת, נבדוק את השדות הנוספים של Student public boolean equals(Object other) { if (!(other instanceof Student)) return false; if (!(super.equals(other)) ) Student s = (Student)other; return average == s.average; }

דריסת השיטה equals – דוגמת שימוש public static void main(String[] args) { Person p1 = new Person(111, "momo"); Person p2 = new Person(111, "momo"); Person p3 = p1; System.out.println("p1 == p2? “ + (p1==p2)); System.out.println("p1 == p3? “ + (p1==p3)); System.out.println("p2 == p3? “ + (p2==p3)); System.out.println("p1 equals p2? “ + p1.equals(p2)); System.out.println("p1 equals p3? “ + p1.equals(p3)); System.out.println("p2 equals p3? “ + p2.equals(p3)); } id=111 name=“momo” id=111 name=“momo” F T F T T T

השיטה equals והשיטה Arrays.equals שיטה זו מקבלת 2 מערכים ובודקת האם הם שווים: האם אורך 2 המערכים זהים והאם האיברים במקומות המתאימים זהים כדי לבדוק אם האיברים במקומות המתאימים זהים השיטה משתמשת בשיטה equals של כל איבר במידה ולא מומשה השיטה equals יש שימוש באופרטור == (שהוא מימוש ברירת-המחדל של equals) כאשר אין מימוש לשיטה equals ב- Point יודפס false, מאחר וההפניות שונות. כאשר יש מימוש יודפס true, כי ערכי האובייקטים זהים.

השיטה hashCode נועדה להחזיר מספר המזהה את האובייקט באופן חד-חד ערכי בשימוש בעיקר במבני נתונים שרוצים לשמור את האובייקט כמפתח, מטעמי יעילות! במקום לבדוק שוויון עבור כל אחד מהשדות, משווים את ערכו של ה- hashCode פעולה המשלימה לאובייקטים לפעולת ה- equals

דוגמאת מימוש

ביחידה זו למדנו: toString getClass equals hashCode המחלקה Object דריסת השיטות toString ו- equals © Keren Kalif