הפניות ושיטות בונות

15
תתתתתת תתתתתת תתתתת

Upload: latoya

Post on 04-Jan-2016

41 views

Category:

Documents


2 download

DESCRIPTION

הפניות ושיטות בונות. הפניות- References. בגאווה יש שני סוגי נתונים: פרימיטיבים : שהם סוגי הנתונים שמובנים בתוך השפה כמו: int, long, boolean, float, char וכו' מחלקות: אלו הטיפוסים החדשים ש"מתווספים" לשפה הבסיסי כמו: string, Point, Random וכו' JAVA מתיחס באופן שונה לשני סוגי הנתונים. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: הפניות ושיטות בונות

הפניות ושיטות בונות

Page 2: הפניות ושיטות בונות

Referencesהפניות-

בגאווה יש שני סוגי נתונים: פרימיטיבים : שהם סוגי הנתונים שמובנים בתוך השפה

וכו'int, long, boolean, float, charכמו: מחלקות: אלו הטיפוסים החדשים ש"מתווספים" לשפה

וכו'string, Point, Randomהבסיסי כמו: JAVA.מתיחס באופן שונה לשני סוגי הנתונים

בעוד שהמשתנים מסוג טיפוסים פרימיטיבים יושבים בזיכרון באיזור התוכנית, המשתנים )האובייקטים( מסוג מחלקות

( והמשתנה heap)הערימה יושבות באזור זיכרון הנקרא לזיכרון היכן שמורים הנתוניםהפניהמכיל

Page 3: הפניות ושיטות בונות

ארגון הזיכרון

Page 4: הפניות ושיטות בונות

מה ההבדל בין הביטויים הבאים:

מה ההבדל בקוד?Point p1 = new Point ) (;p1.set )5,5(;Point p2 = new Point )(;p2.set )5,5(;Point p3 = p1;

א. כמה אובייקטים הגדרתי?ב. איזה מבין הביטויים הבאים יחזירו אמת

p1== p2p1 == p3

Page 5: הפניות ושיטות בונות

הצצה לזיכרון

Page 6: הפניות ושיטות בונות

equalsהגדרת שיטה

כשאנחנו משתמשים באופרטור == אנחנו בודקים האם הערך השמור באופרנד הראשון מכיל אותו ערך כמו הערך

השמור באופרנד השני.

כאשר אנחנו עובדים עם מחלקות, הפעולה אינה בודקת את האובייקט אלא הערך השמור דהיינו ההפניה! גם אם תוכן

שני האובייקטים מכלים בדוייק את אותו הערך, עדיין בא לבדוק equals. מטרת הפעולה שקרהביטוי == יחזיר

האם הערכים השמורים במחלקה הם אותם ערכים.

Page 7: הפניות ושיטות בונות

equalsהוספת פעולת

אשר בודקת האם שני הזמנים Equals נוסיף פעולה Timeאם נחזור למחלקה שלפנינו זהים.

public boolean equals )Time t({return this.hours== t.hours &&

this.minutes == t.minutes;}

כדי להשוות האם הערך זהה נכתוב כך:Time t1 = new Time )(;t1.set )12,30(;Time t2 = new Time) (;t2.set )12,30(;if )t1.equals )t2((…

Page 8: הפניות ושיטות בונות

סיכום הפניות

מושגים :טיפוס פרימיטיבי)טיפוס מסוג מחלקה )אובייקט)הפניה )כתובת(איזור זיכרון הערימהHeap)

שמירת אובייקטים נעשית באזור הזיכרון של הערימה ובמשתנה נשמר ההפניה לאזור הערימה.

פעולת == בודקת האם מדובר באותה אובייקט השמור בשני משתנים שונים

בודקת את תוכן האובייקט לראות האם הם מכילים את equalsפעולה אותם הערכים

Page 9: הפניות ושיטות בונות

איתחול אובייקט

במידה ורצינו לתת ערך ראשוני לאובייקט מסויים היינו חייבים לעשות את זה בשני שלבים:

איתחול באמצעותnew ביצועsetומתן ערכים ראשוניים

השימוש בשיטה בונה מאפשרת לנו לעשות שני השלבים האילו ב"מכה אחת".

השימוש בשיטה בונה מאפשרת לנו לעשות את שני השלבים בבת אחת.

Page 10: הפניות ושיטות בונות

Constructorשיטה בונה -

הגדרה של שיטה בונה זה: שיטה אשר מיישמת את הפעולות הדרושות לאיתחול אובייקט.

שיטה בונה היא בראש ובראשונה שיטה.

לשיטה הזאת שני מאפיינים עיקרייםשם השיטה כשם המחלקה.שיטה שאינה מחזירה ערך

תפקיד השיטה הבונה: לאפשר יישום של לוגיקה ומתן ערכים ראשוניים בעת יצירת האובייקט

Page 11: הפניות ושיטות בונות

דוגמא לשיטה בונה

class Point{private int x;private int y;

public void setX )int x({this.x = x;} public int getX )({ return this.x;}

public void setY)( {this.y = y;} public int getY)( {return this.y;}

public Point )int x, int y({setX)x(;setY)y(;

}}

Page 12: הפניות ושיטות בונות

זמן ביצוע שיטה בונה

הפעולה מתבצעת בעת הקצאת זיכרון בזמן יצירת האובייקט.

זימון שיטה בונה:

Point p = new Point )5,7(;

אנחנו מפעילים אוטומטית את השיטה newבעת כתיבת ה-הבונה ואין לנו אפשרות ל"מנוע" זימון השיטה.

האם היה עד כה שיטה בונה?

ודאי, רק אנחנו לא כתבנו אותו אלא קיבלנו אותו כחלק מהשפה!

Page 13: הפניות ושיטות בונות

ביטול שיטת ברירת מחדל של המערכת

אם אני כעת אכתוב:Point p = new Point)(;

זה יחשב כשגיאת קומפילציה כי כעת אין לנו את "המתנה" שקיבלנו.

כתיבת שיטה בונה מבטלת את השיטה הבונה שקיבלנו!!!

במידה ונרצה שיטה בונה ברירת מחדל, יש להשתמש במנגנון העמסת שיטות כדי שנוכל לזמן

שיטה בונה ברירת מחדל

Page 14: הפניות ושיטות בונות

שיטה בונה ברירת מחדל

מחדל: שיטה בונה ללא שיטה בונה ברירת פרמטרים.

: שיטה בונה המקבלת כפרמטר שיטה בונה מעתיקאובייקט מסוג המחלקה שנבנה

Page 15: הפניות ושיטות בונות

דוגמא לשיטות בונותclass Time{

private int hour;private int minute;public void setHour)int hour({ this.hour = hour >-1 && hour < 24?hour:0;}public int getHour )( {return this.hour;}public void setMinute )int minutes(

{this.minute = minutes >-1 && minutes < 60?minutes:0public int getMinutes ) ( {return this.minute;}}public Time )int hour, int minute({

this.setHour)hour(;this.setMinute)minute(;

}public Time )int hour({ this )hour,0(;}public Time )Time t({this )t.Hour,t.Minute(;}}