אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2022 · אביב מועד א · שאלה 4כל שאלות המבחן ←
תכנות מונחה עצמיםפולימורפיזם ומחלקות מופשטות

מחלקה A: שדה סטטי countA, שדה פרטי myVal, שדה מוגן myString, שני בנאים, ופעולה func המדפיסה "YES". מחלקה B יורשת מ-A, מוסיפה שדה פרטי x ופעולה goodCode הבודקת x>15.0.

public class A {
    public static int countA = 0;
    private int myVal;
    protected string myString;
    public A() { myVal = 1; myString = "BAD"; }
    public A(int val) { myVal = val; myString = "GOOD!"; }
    public int Func() { return 1; }
}
public class B : A {
    private double x;
    public bool GoodCode() { return x > 15.0; }
}
סעיף א

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

  1. המחלקה B לא תעבור קומפילציה כי אין לה אף בנאי.
  2. המחלקה A יורשת את הפעולה goodCode מהמחלקה B.
  3. המחלקה B יורשת את כל התכונות ואת כל הפעולות של המחלקה A.
  4. המחלקה B יכולה לגשת ישירות לתכונות של המחלקה A.
  5. המחלקה A יכולה לגשת לתכונה x של המחלקה B.
סעיף ב

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

public B(int val, double x)

סעיף ג

לפניכם שתי הוראות מהתוכנית הראשית: A one = new B(127, 1.4); A two = new A(613); בעבור כל אחת מההוראות שלפניכם קבעו אם היא תקינה או אינה תקינה. אם ההוראה אינה תקינה, נמקו את קביעתכם וציינו אם זו שגיאת ריצה או שגיאת הידור (קומפילציה).

  1. boolean myBool = one.goodCode();
  2. boolean myBool = two.goodCode();
  3. boolean myBool = ((B)one).goodCode();
  4. boolean myBool = ((B)two).goodCode();
סעיף ד

בתוכנית מסוימת מעוניינים לדעת כמה פעמים הפעולה func הופעלה מעצם מטיפוס A שאינו B, וכמה פעמים היא הופעלה מעצם מטיפוס B. אם אפשר לקבל מידע זה — כתבו איזה שינויים יש לבצע במחלקות A ו-B. אם אי אפשר לקבל את המידע, הסבירו מדוע.

שאלות ותגובות על השאלה

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

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

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