אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2023 · קיץ מועד ב · שאלה 3כל שאלות המבחן ←
תכנות מונחה עצמים›מחלקות ואובייקטים

java

public class First { protected int num; .... } public class Second extends First { private double x; private First f; ... } public class Test { public static void main(String[] args) { First[] arr = new First[5]; arr[0] = new First (13); arr[1] = new First (); arr[2] = new Second(); arr[3] = new Second(5, arr[0]); arr[4] = new Second(2, 3.7, arr[2]); } }


הרצת הפעולה יצרה את העצמים הבאים (תא אחר תא במערך arr):

arr[0]: First{num=13} | arr[1]: First{num=10} | arr[2]: Second{num=10,x=1.1,f=null} | arr[3]: Second{num=5,x=5.5,f→First{num=13}} | arr[4]: Second{num=5,x=5.5,f→(אותו עצם Second שב-arr[2])}


עץ הירושה לסעיף ב': Shape הוא השורש; Square, Triangle, Circle יורשות ישירות מ-Shape; Cylinder יורשת מ-Circle.

Shape ├── Square ├── Triangle └── Circle └── Cylinder

סעיף א

לפניכם כותרות המחלקות Second, First ותכונות שלהן ומחלקה Test הכוללת פעולה ראשית (בקוד שבראש השאלה). הרצת הפעולה יצרה את העצמים המתוארים שם. כתבו במחלקות First ו-Second את הפעולות הבונות (constructors) הנדרשות לשם הרצת הפעולה הראשית כך שיתקבלו העצמים המתוארים.

סעיף ב

נתון עץ הירושה הבא (בראש השאלה). לפניכם קטע קוד מתוך פעולה ראשית: Shape s1 = new Shape(); Shape s2 = new Circle(); Shape s3 = new Cylinder(); Circle c = new Cylinder(); לפניכם שמונה קטעי קוד. עבור כל אחד מהסעיפים יש לציין אם הקוד תקין או לא. אם הקוד אינו תקין — יש להסביר למה הוא אינו תקין ולציין את סוג השגיאה (שגיאת קומפילציה/הידור או שגיאת זמן ריצה).

  1. Circle c0 = new Shape();
  2. Circle c1 = s1;
  3. Circle c2 = (Circle)s2;
  4. Circle c3 = (Circle)s3;
  5. Circle c4 = (Circle) s1;
  6. Triangle t = new Triangle(); Shape s5 = t; Circle c5 = (Circle)s5;
  7. Shape s = (Circle)(new Cylinder());
  8. Circle c = (Shape)(new Cylinder());
שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי