+ All Categories
Home > Documents > הגדרת משתנה עצם דומה, אך לא זהה, להגדרת משתנה פשוט. ...

הגדרת משתנה עצם דומה, אך לא זהה, להגדרת משתנה פשוט. ...

Date post: 19-Mar-2016
Category:
Upload: moira
View: 58 times
Download: 0 times
Share this document with a friend
Description:
הגדרת משתנה עצם דומה, אך לא זהה, להגדרת משתנה פשוט. להבדל יש משמעויות חשובות. כדי להבין אותו נחזור לטבלת המשתנים. נשווה בין הטיפוס הפשוט int לטיפוס העצם מהמחלקה Dog. לשם כך נוסיף למחלקה Dog בונה חדש:. public Dog(String name) { this(name,HAPPY); }. ושיטות חדשות:. - PowerPoint PPT Presentation
31
הההה ההה הההה, הה הה ההה, הההההה ההההה הה ההההה הה הההההההה הההההה. ההה ההההה הההה ההההה ההההה ההההההה. ההה הההההה הההההint הההההה הההה הההההההog
Transcript
Page 1: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

להגדרת משתנה פשוט.אך לא זהה,הגדרת משתנה עצם דומה, להבדל יש משמעויות חשובות.

כדי להבין אותו נחזור לטבלת המשתנים.

Dog לטיפוס העצם מהמחלקה intנשווה בין הטיפוס הפשוט

Page 2: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

בונה חדש: Dogלשם כך נוסיף למחלקה

public Dog(String name) { this(name,HAPPY);}

ושיטות חדשות:public String get_name() { return name;} public void set_name(String name) { this.name = name;}

Page 3: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: ;int iאחרי בצוע הפקודה1.

הפניהטפוסמשתנהiint

טבלת משתנים זיכרון

Page 4: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: ;i = 1. אחרי בצוע הפקודה2

הפניהטפוסמשתנהiint

טבלת משתנים זיכרון

1

Page 5: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: ;int j. אחרי בצוע הפקודה3

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1

Page 6: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: j = i . אחרי בצוע הפקודה4

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 1

i שהיה במקום עליו מצביע הערך.j למקום עליו מצביע הועתק

Page 7: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: ;j = 2 . אחרי בצוע הפקודה5

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

System.out.println(“i = “+i+” “+ ”j = “+j);

יצור פלט:i = 1 j = 2

Page 8: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

יראו הזיכרון וטבלת המשתנים כך: ;Dog my_dog. לעומת זאת, אחרי בצוע הפקודה 6

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

שום מקום לא הוקצה בזיכרון

my_dogDog

Page 9: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

. ; my_dog = new Dog(“Rex”). זיכרון יוקצה רק בבצוע הפקודה 7

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

my_dogDogRex

Page 10: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

8 .Dog your_dog ;

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

my_dogDog

your_dogDog

Rex

Page 11: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

; your_dog = my_dog. פעולת ההצבה 8.; j = iעושה משהו אחר לגמרי מאשר

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

my_dogDog

your_dogDog

Rex

לא הוקצה זיכרון נוסף ולא הועתקו ערכים

Page 12: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

; your_dog.set_name(“Hetz”) על ידי your_dog. נשנה את הערך של 9

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

1 2

my_dogDog

your_dogDog

לא הוקצה זיכרון נוסף ולא הועתקו ערכיםmy_dog !!!השתנה

Hetz

Page 13: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

לסכוםערכי משתנים פשוטים מוצבים ע"י ערך.

ערכי עצמים מוצבים בהפניה.

ומה באשר להצבת משתנים כפרמטרים לפונקציות?אותו דבר

Page 14: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

נראו הזיכרון וטבלת המשתנים כך: j = i ו ;i = 7. כזכור, אחרי בצוע הפקודות1

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

7 7

} public static int change_me(int m)נגדיר פונקציה חדשה m = m – 5; return m ; }

Page 15: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

7 7

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

הפניהטפוסמשתנהmint

טבלת משתנים . j = change_me(i). ניקרא לפונקציה על ידי 2

Page 16: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

7 7הפניהטפוסמשתנה

mint

טבלת משתנים) m .( מועתק למשתנה הפורמאלי ) i(. הערך של המשתנה האקטואלי 3

7

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

7 7הפניהטפוסמשתנה

mint

טבלת משתנים. גוף הפונקציה מתבצע4

2

Page 17: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

הפניהטפוסמשתנהiint

jint

טבלת משתנים זיכרון

7 2

. בחזרה מהפונקציה :5. מקבל את ערך ההחזרהjא.

ב. הזיכרון שהוקצה לפונקציה מתנקה.ג. טבלת המשתנים של הפונקציה מוסרת.

Page 18: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public class Dog_driver4 { public static void main(String[] args) { Dog canis = new Dog(“Rex”); Dog canis1; canis1 = change_name(canis,”Tushtush”); canis.voice(); canis1.voice();

System.out.println(canis == canis1); } public static Dog change_name(Dog to_change, String new_name) { to_change.set_name(new_name); return to_change; }}

Page 19: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

פלט

The dog called Tushtush: HAAUThe dog called Tushtush: HAAUtrue

Page 20: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

Dog canis = new Dog(“Rex”);Dog canis1;

הפניהטפוסמשתנהcanisDog

canis1Dog

טבלת משתנים זיכרון

Rex

אחרי

Page 21: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

הפניהטפוסמשתנהMy_dogDog

טבלת משתנים זיכרון

בזמן בצוע הפונקציה

Tushtush

טפומשתנהס

הפניה

to_changeDog

טבלת משתנים

הפניהטפוסמשתנהcanisDog

canis1Dog

טבלת משתנים זיכרון

בחזרה מהפונקציה

Tushtush

Page 22: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

שתייצג להקת כלבים.Packנגדיר עתה מחלקה .Dogלפני שנכתוב אותה נראה איך צריך לשנות את המחלקה

,null ונאתחל אותו להיות my_packא. נוסיף משתנה עצם פרטי כלומר ברירת המחדל היא שהכלב אינו חבר בלהקה.

; private Pack my_pack = null} ()public Pack get_packב. נוסיף שיטות:

return my_pack;}

public boolean set_pack(Pack pack) { if (my_pack != null) return false;

my_pack = pack; return true;}

Page 23: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public class Pack { static public final int MAX_MEMBERS = 10; private Dog[] members; private int number_of_members; private String name; public Pack(String name) { this.name = name; members = new Dog[MAX_MEMBERS]; number_of_members = 0; } public int size() { return number_of_members; } public String toString() { return "a Pack called "+name; }}

Page 24: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public boolean add_member(Dog candidate) { if (number_of_members >= MAX_MEMBERS) { System.out.println("Pack is full “+ “cannot add "+ candidate); return false; } for (int idog = 0; idog < size();idog++)

if (members[idog] == candidate) { System.out.println(candidate + ” already_in”); return false; } members[number_of_members] = candidate; candidate.set_pack(this); number_of_members++; return true; }}

Page 25: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

Public class Dog_driver5 { static void main(String[] args) { Pack pack1 = new Pack(“mountain”); Pack pack2 = new Pack(“field”);

Dog canis = new Dog(“Rex”);Dog canis1 = new Dog(“Tushtush”);pack1.add_member(canis);canis1.set_pack(pack2);System.out.println(canis+” belongs_to “+canis.get_pack()+

“of size “+ canis.get_pack().size()); System.out.println(canis1+” belongs_to “+canis1.get_pack()+ “of size “+ canis1.get_pack().size()); }}

Page 26: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

פלט

The dog called Rex belongs_to a Pack called mountain of size 1The dog called Tushtush belongs_to a Pack called field of size 0

Page 27: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public boolean set_pack(Pack pack) {if (my_pack != null) return false;my_pack = pack;pack.add_member(this) ;

return true;}

.Dogשל set_packנשנה את שיטה

Page 28: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public boolean set_pack(Pack pack) { if (my_pack != null) return false; if (! pack.has_place()) if (pack.is_included(this)) { my_pack = pack; return true; } else return false; my_pack = pack; pack.add_member(this); return true; }

אכן צריך לשנות אותה עוד

Page 29: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

הן: Packכאשר השיטות החדשות במחלקה

public boolean is_included(Dog dog) { for (int idog = 0; idog < size();idog++) if (members[idog] == dog) { return true; } return false; }

public boolean has_place() { return (size() < MAX_MEMBERS); }

Page 30: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

public boolean add_member(Dog candidate) { if (number_of_members >= MAX_MEMBERS) { System.out.println("Pack is full "); return false; } if (is_included(candidate)) return false; if ((candidate.get_pack() == null)|| (candidate.get_pack() == this)) { members[number_of_members] = candidate; number_of_members++; candidate.set_pack(this); return true; } return false; }

שונה ל add_memberו

Page 31: הגדרת משתנה עצם דומה,  אך לא זהה,  להגדרת משתנה פשוט.  להבדל יש משמעויות חשובות.

פלט

The dog called Rex belongs_to a Pack called mountain of size 1The dog called Tushtush belongs_to a Pack called field of size 1


Recommended