» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
שאלות סיכום
דף ראשי  מתחילים  אובייקטים  שאלות סיכום גרסה להדפסה

 

שאלות סיכום

 

ש: בתכנון מונחה-עצמים, נהוג לומר שאובייקט הוא ________ של מחלקה.
השלם את המילה החסרה.

 

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

 

ש: בתכנון מונחה-עצמים, נהוג לומר שאובייקט הוא בעל מ______ וה__________.
השלם את המילים החסרות, שמתחילות באותיות הנ"ל.

 

ת: בתכנון מונחה-עצמים, נהוג לומר שאובייקט הוא בעל מצב והתנהגות.

 

ש: המצב של אובייקט נכלל בתוך _____________ שלו, וההתנהגות שלו ניתנת ליישום באמצעות ה__________ שלו. השלם את המילים החסרות.

 

ת: המצב של אובייקט נכלל בתוך משתנים חברים במחלקה (או נתונים חברים במחלקה),
וההתנהגות שלו ניתנת ליישום
באמצעות מתודות (או פונקציות חברות במחלקה).

 

ש: המשתנים החברים של אובייקט עשויים להיות __________ או _________. השלם את המילים החסרות.

 

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

 

ש: מה הכוונה במונח "שליחת הודעה לאובייקט"?

 

ת: הפעלת התנהגותו של אובייקט באמצעות הפעלת אחת המתודות שלו
(שליחת הודעה למתודה שלו).

 

ש: מהם שני הדברים שיתרחשו, בדרך כלל, כאשר אובייקט מקבל הודעה?

 

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

 

ש: מה קורה ב‑Java לזיכרון, שנתפס על ידי אובייקט, כאשר אין עוד צורך באותו אובייקט,
ומה נעשה בדרך כלל כדי שזה יקרה?

 

ת: ב‑Java, כאשר אין עוד צורך באובייקט, אנו פשוט מתעלמים ממנו.
בסופו של דבר, אוסף האשפה יגיע (או שלא יגיע)
כדי לאסוף אותו למחזור.

 

ש: מהם השלבים בחייו של אובייקט על פי Baldwin's Java Tutorial ?

 

ת: השלבים בחייו של אובייקט הם:

 

·       יצירה

·       שימוש

·       ניקוי

 

ש: על פי Baldwin's Java Tutorial, יצירה של אובייקט כרוכה בשלושה שלבים
(שלרוב ניתן לשלב ביניהם). מהם אותם שלבים?

 

ת: שלושת השלבים ביצירה של אובייקט הם:

 

·       הצהרה (מתן שם לאובייקט)

·       יצירה (הקצאת זיכרון עבור האובייקט)

·       אתחול אופציונלי (מתן ערכים תחיליים למשתני המופע של האובייקט)

 

ש: האם Java מאפשרת יצירת משתנים מטיפוסים פרימיטיביים בזיכרון הדינמי?
אם לא, הסבר מדוע ותאר מה ניתן לעשות על מנת להשיג תוצאה דומה.

 

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

 

ש: מערך של אובייקטים ב‑Java נוצר כמערך של משתני הצבעה, כך שניתן להשתמש בכל משתנה הצבעה ליצירת אובייקט, שעליו מצביע אותו משתנה: אמת או שקר? אם שקר, הסבר מדוע והבא קטע קוד להמחשת תשובתך, או הפנייה לתוכנית לדוגמה ב‑Baldwin's Java Tutorial, שתמחיש זאת.

 

ת: אמת.

 

ש: האם ב‑Java תמיד הכרחי להצהיר(לתת שם) לכל האובייקטים החדשים? אם לא, הסבר מדוע והבא קטע קוד להמחשת תשובתך, או הפנייה לתוכנית לדוגמה ב‑Baldwin's Java Tutorial, שתמחיש זאת.

 

ת: ב‑Java אין זה תמיד הכרח להצהיר (לתת שם) על אובייקט. לדוגמה, כאשר אובייקט חדש נוצר אך ורק לצורך שימוש בביטוי, ואין כוונה לאפשר אליו גישה מחוץ לאותו ביטוי. הדבר מומחש בתוכנית date1.java בשיעור Java036.html.

 

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

 

ת: אין כל הבדל מבחינת התחביר המשמש לגישה למשתנה או למתודה.

 

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

 

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

 

ש: נתון אובייקט בשם obj, בעל מתודת מופע  בשם myMethod() שהוצהרה כ‑public.
הבא קטע קוד שיראה את התחביר הנכון לצורך גישה למתודה.

 

ת: התחביר הנכון לשם גישה למתודת מופע  בשם myMethod() הוא:

 

obj.myMethod()

 

ש: האם על פי הגישה של תכנון מונחה-עצמים, מומלץ להסתיר משתני מופע  מאחורי מתודות-גישה? אם לא, הסבר מדוע לא.

 

ת: כן, על פי הגישה של תכנון מונחה-עצמים מומלץ להסתיר משתני מופע  מאחורי מתודות-גישה.
יש לכך סיבות רבות.
אחת החשובות שבהן היא, שהסתרת משתני מופע  מאפשרת לשנות במועד מאוחר יותר את השימוש במשתני המופע על מנת לשפר את התנהגות האובייקטים של מחלקה,
מבלי לשנות את הקוד של אותה מחלקה, ובהנחה שמתודות-הגישה לא שונו.

 

ש: השבת הזיכרון (למערכת ההפעלה), שתפסו אובייקטים שיותר אין בהם צורך, מבוצעת ב‑Java אוטומטית באמצעות מה שנהוג לכנות __________. השלם את החסר.

 

ת: השבת זיכרון למערכת ההפעלה מבוצעת ב‑Java אוטומטית על ידי אמצעי הקרוי אוסף אשפה.

 

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

 

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

 

ש: מתי אובייקט נעשה מוּעָד עבור איסוף אשפה?

 

ת: אובייקט נעשה מוּעָד עבור איסוף אשפה כאשר אין יותר הצבעות עליו.

 

ש: מה ניתן לעשות במכוון בתוכנית, על מנת להועיד אובייקט עבור אוסף האשפה?

 

ת: ניתן להועיד אובייקט עבור אוסף האשפה בתוכנית על ידי הַשָׂמַת ערך null לכל ההצבעות שמצביעות על האובייקט.

 

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

 

ת: שקר. אוסף האשפה נועד למטרה אחת ויחידה, והיא לתבוע את הזיכרון שתפסו אובייקטים שאינם נחוצים יותר, ואינו מיועד לכל מטרה אחרת שקשורה לניקוי הדרוש.
אובייקט הופך מיועד לאוסף האשפה כאשר אין יותר הצבעות,
שמצביעות על אותו אובייקט.
אולם, העובדה שאובייקט מוּעָד לאיסוף אשפה, אינה מציינת בהכרח שהוא ייאסף.
אוסף
האשפה רץ בתהליכון בעל קדימוּת נמוכה, וייתכן גם שלא ירוץ כלל אם לא מתגלה מחסור בזיכרון.

 

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

 

ת: לפני שאוסף האשפה תובע את הזיכרון, שתפס אובייקט כלשהו, הוא תמיד קורא למתודת finalize של אותו אובייקט. מתודת finalize חברה במחלקת Object. כיוון שכל המחלקות יורשות ממחלקת Object, בכל מחלקה חדשה שתגדיר תופיע כברירת מחדל גם מתודת finalize .

 

ש: מה עליך לעשות על מנת שימוש יעיל במתודת finalize? הסבר מדוע ייתכן שתרצה לעשות זאת.

 

ת: על מנת לעשות שימוש במתודת finalize, עליך לדרוס אותה ולספק את הקוד, שתרצה לבצע,
לפני שהזיכרון מושב
למערכת ההפעלה.

 

ש: ב‑Java, כאשר אובייקט הופך מוּעָד לאיסוף אשפה, תמיד ניתן לסמוך על כך שמתודת finalize תבצע מייד את כל פעולות הניקוי הנחוצות: אמת או שקר? אם שקר, הסבר מדוע.

 

ת: שקר. אף על פי שניתן לסמוך על כך שמתודת finalize תיקרֵא לפני שאוסף האשפה תובע את הזיכרון, שתופס אובייקט כלשהו, לא ניתן לדעת בוודאות מתי, ואם בכלל, הזיכרון הזה יושב למערכת ההפעלה. אין כל ערובה שאוסף האשפה אכן יתבע את הזיכרון במהלך ביצוע התוכנית.

 

ש: הבא קטע קוד להמחשת האפשרות להריץ את אוסף האשפה על ידי קריאה למתודה.
האם זה מבטיח את איסוף האשפה? אם לא, הסבר מדוע לא.

 

ת: שקר. Campione & Walrath מציינות שניתן להריץ את אוסף האשפה בכל זמן שתרצה על ידי קריאה למתודה המובאת למטה. עם זאת הן גם מציינות שהבקשה להריץ את אוסף האשפה אינה מבטיחה שאוסף האשפה אכן יתבע את האובייקטים שלך.

 

System.gc();

 

 

ש: כתוב תוכנית Java העונה על הדרישות הבאות.

 

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

 

הצג את הערך המאוחסן בכל משתנה הצבעה וכן את הערך המאוחסן באובייקט, שעליו מצביע אותו משתנה הצבעה.

 

הצג הודעת סיום שבה יופיע שמך.

 

/*File SampProg12.java from lesson 36
Copyright 1997, R.G.Baldwin
Without reviewing the solution that follows, write a Java
application that illustrates static instantiation of
primitive variables and also illustrates instantiation 
of dynamic objects and dynamic arrays of objects. In 
this case, the word static is not being used in the 
sense of the static keyword that produces class 
variables and class methods.  It is being used in the 
sense of "not dynamic", meaning that the memory is
allocated at compile time and not at runtime.

Display the value contained in each reference variable 
as well as the value stored in the object pointed to 
by the reference variable.

Provide a termination message with your name.
**********************************************************/

class SampProg12 {
  //single instance variable of the class
  private int objData;

  //constructor
  public SampProg12(int inData){objData = inData;}

  public int getData(){return objData;} //get method

  public static void main(String[] args){
    //Instantiate and initialize static primitive variable
    int myIntVar = 6;
    System.out.println("myIntVar contains " + myIntVar);

    //Instantiate and initialize dynamic object
    SampProg12 myObjPtr = new SampProg12(12);
    System.out.println("myObjPtr contains " + myObjPtr);
    System.out.println(
      "myObjPtr points to object containing " 
      + myObjPtr.getData() );

    //Instantiate dynamic array of objects.
    SampProg12[] myObjArrayPtr = new SampProg12[3];

    //Put some data in the dynamic array of objects
    for(int i = 0; i < 3; i++)
      myObjArrayPtr[i] = new SampProg12(i+13);

    //Display the addresses in the array of pointers 
    // to objects
    System.out.print("myObjArrayPtr contains ");
    for(int i = 0; i < 3; i++)
      System.out.print(myObjArrayPtr[i] + " ");
    System.out.println();

    //Display the data pointed-to by the array of pointers
    System.out.print(
      "myObjArrayPtr points objects containing ");
    for(int i = 0; i < 3; i++)
      System.out.print(myObjArrayPtr[i].getData() + " ");
    System.out.println();

    System.out.println("Terminating, Dick Baldwin");
  }//end Main
}//End SampProg12 class definition.

 

 

ש: כתוב תוכנית Java העונה על הדרישות הבאות.

 

מבלי להיעזר בפתרון הניתן בהמשך, כתוב אפליקציית Java הממחישה יצירה ושימוש באובייקט אנונימי.

 

הצג הודעת סיום שבה יופיע שמך.

 

/*File SampProg13.java from lesson 36
Copyright 1997, R.G.Baldwin
Without reviewing the following solution, write a Java
application that illustrates the instantiation and use
of an anonymous object.

Also provide a termination message with your name.
**********************************************************/

class SampProg13{
  public static void main(String[] args){
    System.out.println("" 
      + ((new Integer(5).intValue()) * 3));
    System.out.println("Terminating, Dick Baldwin");
  }//end main
  
}//end class SampProg13

 

 14-01-04 / 19:08  נוצר ע"י רונית רייכמן  בתאריך 
 השלבים בחייו של אובייקט - הקודם
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 2