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

Square מכילה width, color, בונה, ואת paint/Paint ו-perimeter/Perimeter. Rectangle יורשת מ-Square, מוסיפה length ומעמיסה equals(Rectangle)/Equals(Rectangle) (לא דריסה של equals(Object)). שלושת הסעיפים בודקים העמסה חוקית, דריסה חוקית, ומעקב אחרי איזו equals נבחרת בפועל בכל קריאה.

public class Square {
    protected double width;
    protected String color;
    public Square(double val){ width = val; color = "black"; }
    public void paint(double scale, String color){ ... }
    public double perimeter(double scale){ ... }
}

public class Rectangle extends Square {
    private double length;
    public Rectangle(double val1, double val2){
        super(val1);
        length = val2;
    }
    public boolean equals(Rectangle other){
        return width == other.width && length == other.length;
    }
}
סעיף א

אילו מהחתימות הבאות היא העמסה (overloading) חוקית של הפעולה paint? הסבירו את תשובתכם!

  1. public int paint (double y, String x)
  2. public void paint (int x)
  3. public double paint (double a, char b)
  4. private void paint(double x, String y)
  5. private double paint (String y, double x)
סעיף ב

נתונה המחלקה Rectangle (מלבן) היורשת מ-Square (ראו את קוד המחלקה למעלה). עבור כל אחת מבין הפעולות הבאות קבעו אם אפשר להוסיף אותה למחלקה Rectangle? הסבירו את תשובתכם!

  1. private double perimeter (double x){...}
  2. public double perimeter (double y) {...}
  3. public void perimeter (){...}
  4. public int perimeter (int y) {...}
  5. public void perimeter (double x) {...}
סעיף ג

לפניכם קטע קוד מהתוכנית הראשית: Square sqr1 = new Square(1); Square sqr2 = new Square(1); Square sqrRec = new Rectangle(1,2); Rectangle rec = new Rectangle(1,2); System.out.println(sqr1.equals(sqr2)); System.out.println(sqrRec.equals(rec)); System.out.println(sqrRec.equals((Square)rec)); System.out.println(((Rectangle)sqrRec).equals(rec)); System.out.println(rec.equals(sqrRec)); עקבו אחרי ביצוע קטע הקוד ורשמו מה יהיה הפלט.

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

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

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

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