Transcript
Page 1: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

הערות על הבוחן

( מבוא לעצמים.כולל. הבוחן כולל את כל החומר שנלמד בקורס עד )1 נכללת בחומר לבוחןאינה הורשה

. הבוחן כולל את החומר שנלמד בתרגילים את הפרקים א-ז בספר "פרקי מבוא2 במדעי המחשב" ואת כל החומר הרלבנטי באתרים של המורים השונים.

. מומלץ לעיין בבוחן של שנה שעברה. מתכונת הבוחן השנה תהיה דומה. 3 כל נבחן יקבל:

. אחדא. חוברת שאלות שאליה מצורף דף תשובות .לטיוטה בלבד ב. חוברת בחינה שתשמש

בסוף הבוחן יאספו רק דפי התשובות. תשובות במחברת הטיוטה לא יקראו.. המקום בדף התשובות הוקצה בנדיבות. אם תשובתכם ארוכה מכדי להיכנס במקום4

שהוקצה לה, היא כנראה לא נכונה.

יענו על שאלות כדי שלא להעניק יתרון בלתי הוגן לא . בזמן הבוחן המורים 3

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

Page 2: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

לאור הצלחתנו לדמות כלב. קיבלנו משימה חדשהRobDogלדמות רובוט של כלב באמצעות המחלקה

הרובוט דומה להפליא לכלב להוציא מספר הבדלים דקים:

א. במקום בשר הרובוט אוכל סוללות..tootooב. במקום לנבוח הוא שורק

ג. הוא יודע קצת חשבון.

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

Page 3: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

הדרך הקלה )ולכן הנכונה( לעשות זאת היא באמצעות מנגנון ההורשה (inheritance).

. Dog את המחלקה תירש RobDogהמחלקה

Page 4: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

public class RobDog extends Dog {}

ההגדרה

יוצרת מחלקה חדשה.RobDog.javaבקובץ

Dog.המשתנים והשיטות הפומביות שלה זהים לאלו של

. Dog ירשה אותם מהמחלקה RobDogאנו אומרים שהמחלקה

.עוד נורש באופן אוטומטי הבונה הריק

Page 5: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

public class RobDog_driver1 { public static void main)String[] args( { RobDog canis = new RobDog)(; RobDog canis1; canis1 = change_name)canis,"Tushtush"(; canis.voice)(; canis1.voice)(; System.out.println)canis == canis1(; } public static RobDog change_name)RobDog to_change, String new_name( { to_change.set_name)new_name(; return to_change; }}

Page 6: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

פלט

The dog called Tushtush: HAAUThe dog called Tushtush: HAAUtrue

Page 7: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

עם זאת, שלמחוץ לכמוסהחשוב לזכור שהמחלקה היורשת נמצאת

המחלקה המורישה.

שיטה חדשה RobDog להגדיר ב אי אפשר

public void set_name_to_peng)( { name = “peng”;}

Page 8: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

חייבים לעבור - Dog nameכדי לשנות את המשתנה הפרטי של . set_name הציבורית דרך השיטה

public void set_name_to_peng)( { set_name)“peng”(;}

Page 9: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

אנחנו כמובן לא מסתפקים בבונה אחד

public RobDog)String name, int mood( { super)name,mood(;}public RobDog)String name({ super)name(; }

public RobDog)({ super)(;}

ולמען השלמות

Page 10: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

public RobDog)String name, int mood( { super)name,mood(;}public RobDog)String name({ super)name(; }public RobDog)({ super)(;}

)…(superשימו לב לשמוש ב המאפשר לנו לפנות אל בונה של

. Dogמחלקת האם

)…(this ל שימו גם לב שבדומהsuper )…(חיב להופיע בשורה ה

ראשונה.

Page 11: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

.Dog כמעט זהה למחלקה RobDogבשלב זה המחלקה נתחיל לשנות אותה כך, שהעצמים יהיו רובוטים כלביים ולא כלבים ממש.

Page 12: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

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

כך שתשרוק במקום לנבוח. voiceונשנה את השיטה .(overriding)דריסה לשינוי כזה בשיטה של מחלקה יורשת קוראים

public static final String WHISTLE = “TOOTOO”;

Page 13: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

מ )voice)intלכאורה מספיק להעתיק את השיטה ולשנות מלה אחת RobDog למחלקה Dogהמחלקה

Page 14: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

public void voice)int n_sounds( { String sound; int sound_counter; if )n_sounds <= 0 ( { System.out.println)"Error in Dog.voice: "+ "Cannot produce zero or fewer sounds"(; return; } if )mood == HAPPY( sound = WHISTLE; else if )mood == SAD( sound = HOWL; else sound = "Unknown mood "+mood; System.out.print)this+": "(; for )sound_counter = 0; sound_counter< n_sounds; sound_counter++( System.out.print)sound+" "(; System.out.println)(; }

אולם אז נכפיל את מספר שורות הקוד )ואת הסיכויים לטעות(.

Page 15: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

.voice יותר על כללית להעמיס שיטה נוספת Dogמוטב במחלקה

public void voice)int n_sounds, String happy_sound,String sad_sound(

Page 16: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

public void voice)int n_sounds,String happy_sound,String sad_sound( { String sound; int sound_counter; if )n_sounds <= 0 ( { System.out.println)"Error in Dog.voice: "+ "Cannot produce zero or fewer sounds"(; return; } if )mood == HAPPY( sound =happy_sound; else if )mood == SAD( sound = sad_sound; else sound = "Unknown mood "+mood; System.out.print)this+": "(; for )sound_counter = 0; sound_counter< n_sounds; sound_counter++( System.out.print)sound+" "(; System.out.println)(; }

Page 17: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

Dog במחלקה )voice )intעכשיו נכתוב מחדש את

public void voice)int n_sounds( { voice)n_sounds,BARK,HOWL(;}

.RobDogונכתוב בקלות את השיטה הדורסת במחלקה

public void voice)int n_sounds( { voice)n_sounds,WHISTLE,HOWL(;}

שימו לב Dog במחלקה )(voiceאין צורך לכתוב מחדש את השיטה

ואין צורך לדרוס אותה

Page 18: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

voiceהבקיאות של הרובוט שלנו בחשבון מתבטאת בהעמסה נוספת של RobDogשקימת רק ב

public void voice)int n, int m( { voice)n*m(;}

Page 19: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

.)(toStringשלב ב. נדרוס את

public String toString)( { return "The robot dog called "+get_name)(; }

Page 20: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

שלב ג. נשנה את סוג המזון החביב על הרובוטים. שיטה חדשה Dogלשם כך צריך להגדיר ב

public void set_eats)String food( { eats = food;}

Page 21: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

:RobDogונשנה מעט את הבונים של

public RobDog)String name, int mood( { super)name,mood(; set_eats)“battery ”(;}

public RobDog)String name({ super)name(; set_eats)“battery ”(; }

public RobDog)({ super)(; set_eats)“battery ”(;}

Page 22: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

- הרובוט רוצה להתחזות לדבר האמיתיsuperשימוש נוסף ב

RobDogנגדיר במחלקה

public void pretend_to_be_a_dog)int n( { super.voice)n(;}

Page 23: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

Public class RobDog_driver { public static void main)String[] args( { RobDog rob = new RobDog)(;

rob.voice)2,2(; rob.eat)“meat”(;

rob.voice)2,3(; rob.eat)“battery”(; rob.voice)2,4(;

rob.pretend_to_be_a_dog)3(; } }

Page 24: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

The robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOOThe robot dog called dog_number0: OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOThe robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOOThe robot dog called dog_number0: HAAU HAAU HAAU

The robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOOThe robot dog called dog_number0: OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOThe robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOOThe robot dog called dog_number0: HAAU HAAU HAAU

פלט

Page 25: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

כעת מבקשים מאתנו חתול

Catמבחינות רבות חתול דומה לכלב ולא נרצה לכתוב את המחלקה מההתחלה.

. Dog לא יכולה לרשת את המחלקה Catמצד שני המחלקה .set_pack תהיה שיטה Catלמשל, אין הגיון שבתפריט של

)חתולים לעולם אינם מתארגנים בלהקות(

Page 26: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

( abstraction)המהלך הנדרש מאתנו הוא הפשטה עלינו לזהות את המהות המופשטת, שמאחורי שני הטיפוסים

המוחשיים: כלב ו חתול - שניהם יונקים.

תכיל לכן חלק ניכר מהקוד שהופיע קודם Mammal המחלקה . Dogב מחלקה

Public class Dog extends Mammal תהפוך להיות Dogהמחלקה

Public class Cat extends Mammal תיכתב כ Catוהמחלקה

Page 27: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

ומה באשר לתרנגולת?

Page 28: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

ככל שנמשיך בפרויקט ילך ויבנה עץ ההורשה

Organism

Animal Plant Archeon Microbe

ReptileMammal Bird Fish

Cat Dog

Insect

RobDog

Chicken

Page 29: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

)כמעט( כל המחלקות יורשות. Javaב Objectאם אין למחלקה מחלקת אם מפורשת – מחלקת האם שלה היא

Page 30: הערות על הבוחן 1. הבוחן כולל את כל החומר שנלמד בקורס עד ( כולל ) מבוא לעצמים

Recommended