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

שלוש מחלקות: Basis (תכונה מוגנת num1, שני בנאים, print מדפיסה num1). SingleOne יורשת מ-Basis, מוסיפה num2, print דורסת ומוסיפה הדפסת num2 (דרך super.print/base.Print). MultiOne יורשת מ-Basis, מחזיקה מערך קבוע של עד 5 הפניות ל-Basis (תבנית Composite), print דורסת ומדפיסה את כל האיברים במערך רקורסיבית, בלי לקרוא ל-super.print.

class Basis {
    protected int num1;
    public Basis() { }
    public Basis(int n) { this.num1 = n; }
    public void print() {
        System.out.println(this.num1);
    }
}
class SingleOne extends Basis {
    protected int num2;
    public SingleOne(int n1, int n2) {
        super(n1);
        this.num2 = n2;
    }
    public void print() {
        super.print();
        System.out.println(this.num2);
    }
}
class MultiOne extends Basis {
    private int count = 0;
    private Basis[] arr;
    public MultiOne() {
        this.arr = new Basis[5];
    }
    public void print() {
        for (int i = 0; i < count; i++)
            arr[i].print();
    }
    public void add(Basis b) {
        if (count < arr.length) {
            arr[count] = b;
            count++;
        }
    }
}
סעיף א

ציירו תרשים UML שמייצג את הקשרים בין המחלקות Basis, SingleOne, MultiOne. יש לסמן ירושה באמצעות החץ והכלה באמצעות היהלום.

סעיף ב

נתונה המחלקה Test ובה הפעולה הראשית. עקבו בעזרת טבלת מעקב אחר הפעולה main במחלקה Test, ורשמו את הפלט. על הטבלה לכלול את ערכי כל המשתנים, ובעבור כל עצם — את ערכי התכונות שלו.

class Test {
    public static void main(String[] args) {
        MultiOne container = new MultiOne();
        SingleOne s1 = new SingleOne(11, 35);
        container.add(s1);
        s1 = new SingleOne(47, 22);
        container.add(s1);
        s1 = new SingleOne(8, 17);
        container.add(s1);
        MultiOne subContainer = new MultiOne();
        s1 = new SingleOne(53, 40);
        subContainer.add(s1);
        s1 = new SingleOne(21, 13);
        subContainer.add(s1);
        s1 = new SingleOne(39, 62);
        subContainer.add(s1);
        container.add(subContainer);
        container.print();
    }
}
שאלות ותגובות על השאלה

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

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

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