שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2025 - מחלקות
נתון קוד הבא
מה יקרה כאשר נקמפל ונריץ את הקוד?
סמנו את הטענה הנכונה ביותר.
א. נקבל שגיאת קומפילציה בגלל שורות 1 ו- 2
ב. נקבל שגיאת קומפילציה בגלל שורות 3 ו- 4
ג. הקוד מתקמפל אך נקבל שגיאת זמן ריצה
ד. הקוד תקין ומדפיס Student Bar-Ilan Professor Bar-Ilan
ה. אף אחת מהטענות הנ"ל אינה נכונה
נמקו בקצרה את תשובתכםן.
מה יקרה כאשר נקמפל ונריץ את הקוד?
סמנו את הטענה הנכונה ביותר.
א. נקבל שגיאת קומפילציה בגלל שורות 1 ו- 2
ב. נקבל שגיאת קומפילציה בגלל שורות 3 ו- 4
ג. הקוד מתקמפל אך נקבל שגיאת זמן ריצה
ד. הקוד תקין ומדפיס Student Bar-Ilan Professor Bar-Ilan
ה. אף אחת מהטענות הנ"ל אינה נכונה
נמקו בקצרה את תשובתכםן.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ג2025סמסטר ב
★★★★★
מחלקותאובייקטיםמעקב אחר קודמחלקות פנימיות
שימו לב שהמחלקות
Student ו-Professor הן מחלקות פנימיות (לא סטטיות). בדקו את התחביר ליצירת מופעים שלהן ואת הדרך שבה הן ניגשות לשדות של המחלקה החיצונית, במיוחד כאשר יש הסתרת שמות.התשובה הנכונה היא ה'.
הקוד יתקמפל וירוץ ללא שגיאות, אך הפלט שיודפס אינו תואם במדויק לאף אחת מהאפשרויות המוצעות.
ניתוח הקוד:
1. המחלקות
2. שורות 3 ו-4 (
3. בתוך המחלקות הפנימיות, קיים שדה
מעקב אחר ריצת הקוד:
* הקריאה
* באופן דומה, הקריאה
* ההדפסה מבצעת שרשור של שתי המחרוזות הללו:
* הפלט הסופי שיודפס למסך הוא:
מסקנה:
* טענות א', ב', ו-ג' שגויות מכיוון שהקוד תקין לחלוטין ורץ ללא שגיאות קומפילציה או ריצה.
* טענה ד' מציגה את הפלט
* מאחר שאף אחת מהטענות אינה מתארת את המצב באופן מדויק, התשובה הנכונה היא ה'.
הקוד יתקמפל וירוץ ללא שגיאות, אך הפלט שיודפס אינו תואם במדויק לאף אחת מהאפשרויות המוצעות.
ניתוח הקוד:
1. המחלקות
Student ו-Professor הן מחלקות פנימיות (inner classes) לא-סטטיות של המחלקה University. המשמעות היא שכל אובייקט שלהן מקושר למופע ספציפי של המחלקה העוטפת, University.2. שורות 3 ו-4 (
Student s = u.new Student();) מדגימות את התחביר הנכון ליצירת מופעים של מחלקות פנימיות. יש צורך במופע של המחלקה החיצונית (u) כדי ליצור מופע של הפנימית. לכן, הקוד תקין מבחינת יצירת האובייקטים ואין שגיאת קומפילציה.3. בתוך המחלקות הפנימיות, קיים שדה
name המסתיר את השדה name של המחלקה החיצונית (תופעה שנקראת Name Shadowing). כדי לגשת במפורש לשדה name של המופע מהמחלקה החיצונית, יש להשתמש בתחביר University.this.name. התחביר בשורות 1 ו-2 הוא תקין לחלוטין, ולכן גם כאן אין שגיאת קומפילציה.מעקב אחר ריצת הקוד:
* הקריאה
s.getName() תחזיר את השרשור של name מהמחלקה Student ("Student"), רווח, name מהמחלקה University ("Bar-Ilan"), ורווח נוסף בסוף. התוצאה: "Student Bar-Ilan ".* באופן דומה, הקריאה
p.getName() תחזיר "Professor Bar-Ilan ".* ההדפסה מבצעת שרשור של שתי המחרוזות הללו:
"Student Bar-Ilan " + "Professor Bar-Ilan ".* הפלט הסופי שיודפס למסך הוא:
Student Bar-Ilan Professor Bar-Ilan (עם רווח בסוף).מסקנה:
* טענות א', ב', ו-ג' שגויות מכיוון שהקוד תקין לחלוטין ורץ ללא שגיאות קומפילציה או ריצה.
* טענה ד' מציגה את הפלט
Student Bar-Ilan Professor Bar-Ilan, ללא הרווח בסופו. מכיוון שהפלט בפועל מכיל רווח בסוף, טענה זו אינה מדויקת.* מאחר שאף אחת מהטענות אינה מתארת את המצב באופן מדויק, התשובה הנכונה היא ה'.