שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2021 - מעקב אחר קוד
שאלה 3. מספר במערכת 471892
(BeeperC) שאלה זו מתייחסת למחלקות המופיעות בנספח [
1. יודפס A
2. יודפס B C
3. יודפס A B C
4. יודפס A beep B beep C beep
5. הקוד לא יתקמפל
(BeeperC) שאלה זו מתייחסת למחלקות המופיעות בנספח [
Beeper]. מה ידפיס הקוד הבא (בהנחה שהוא עטוף במחלקה ובמתודת main כנדרש)?1. יודפס A
2. יודפס B C
3. יודפס A B C
4. יודפס A beep B beep C beep
5. הקוד לא יתקמפל
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2021סמסטר ב
★★★★★
מעקב אחר קודרשימות מקושרותרקורסיהאובייקטיםמחסניות
שימו לב לקריאות השרשרת של המתודה
add. מה היא חייבת להחזיר כדי שהקוד יתקמפל, ואיזה מבנה נתונים נוצר כתוצאה מכך? כיצד המתודה beep פועלת על מבנה זה?הקוד יוצר אובייקט
לאחר מכן, מתבצעת שרשרת של קריאות למתודה
1.
2.
לבסוף, מתבצעת קריאה למתודה
סביר להניח שהמתודה
- היא מדפיסה את הערך של האובייקט הנוכחי.
- אם קיים אובייקט עוקב (כלומר, המצביע
לכן, סדר ההדפסה יהיה:
1. הקריאה
2. הקריאה ל-
3. הקריאה ל-
הפלט הסופי יהיה "A B C". לכן, התשובה הנכונה היא 3.
b מהמחלקה CustomBeeper עם הערך "A".לאחר מכן, מתבצעת שרשרת של קריאות למתודה
add. כדי ששרשור כזה יתאפשר, המתודה add חייבת להחזיר אובייקט מהטיפוס CustomBeeper. ההתנהגות הסבירה ביותר, המאפשרת את השרשור, היא שהמתודה add מקשרת את האובייקט הנוכחי לאובייקט החדש (המתקבל כפרמטר), ומחזירה את האובייקט *החדש*.1.
b.add(new CustomBeeper("B")): קריאה זו מקשרת את האובייקט b (עם הערך "A") לאובייקט חדש עם הערך "B". המתודה מחזירה את האובייקט החדש ("B"). כעת המבנה הוא A -> B.2.
.add(new CustomBeeper("C")): קריאה זו מתבצעת על האובייקט שהוחזר בשלב הקודם (האובייקט "B"). היא מקשרת את האובייקט "B" לאובייקט חדש עם הערך "C". כעת נוצר מבנה נתונים של רשימה מקושרת שראשה ב-b, והיא נראית כך: A -> B -> C.לבסוף, מתבצעת קריאה למתודה
b.beep(), כלומר על ראש הרשימה ("A").סביר להניח שהמתודה
beep פועלת באופן רקורסיבי:- היא מדפיסה את הערך של האובייקט הנוכחי.
- אם קיים אובייקט עוקב (כלומר, המצביע
next אינו null), היא קוראת למתודה beep() של האובייקט העוקב.לכן, סדר ההדפסה יהיה:
1. הקריאה
b.beep() מדפיסה "A " וקוראת ל-beep() של האובייקט הבא ("B").2. הקריאה ל-
beep() על "B" מדפיסה "B " וקוראת ל-beep() של האובייקט הבא ("C").3. הקריאה ל-
beep() על "C" מדפיסה "C ". מכיוון שאין לו אובייקט עוקב, הרקורסיה נעצרת וחוזרת.הפלט הסופי יהיה "A B C". לכן, התשובה הנכונה היא 3.