אתם מתרגלים שאלה מתוך בגרות מדעי המחשב — מבני נתונים (שאלון 899271)מבחן 2026 · קיץ מועד א · שאלה 11כל שאלות המבחן ←
תכנות מונחה עצמיםירושה

לשאלה זו שני נוסחים: בשפת Java בעמודים 20-21 ובשפת C# בעמודים 22-23. לפניכם שלושה סעיפים א-ג, שאין קשר ביניהם.

סעיף א - לפניכם המחלקה Father ללא מימוש הבונים, והמחלקה Son ללא מימוש הבונים ופעולת toString:

לפניכם קטע קוד והפלט שהתקבל בעקבותיו:

קודפלט
Father x1 = new Father(); println(x1); //1st=1, num=9 //1
Father x2 = new Father(3); println(x2); //2st=1, num=3 //2
Father x3 = new Son(5,'A'); println(x3); //3st=2, num=5, ch=A //3
Father x4 = new Son(7); println(x4); //4st=2, num=7, ch=Z //4

אין להוסיף פעולות נוספות למחלקות.

סעיף ב - נתונות המחלקות A,B,C,D והפעולה main במחלקה Tester, שרצה באופן תקין:

לפניכם שישה תרשימי היררכייה ממוספרים 1-6 (החץ מסמן יחס ירושה, מהבן אל האב):

(X <- Y פירושו: Y יורשת מ-X. למשל בתרשים 4: C יורשת מ-A, B יורשת מ-C, D יורשת מ-B - שרשרת אחת).

בסוף הפעולה main נוספו השורות הבאות, שגם הן רצות באופן תקין:

סעיף ג - נתונה המחלקה BBB, היורשת ממחלקה AAA:

כתבו במחלקה AAA את תכונות המחלקה (כולל הרשאות הגישה) ואת כותרות הפעולות הנדרשות כדי שהמחלקה BBB תהיה תקינה, בהתאם לעקרונות תכנות מונחה עצמים. אין צורך לממש את הפעולות שאת כותרתן הוספתם במחלקה AAA. אין לשנות את הקוד של המחלקה BBB.

public class Father {
    private static int st = 0;
    protected int num;
    public Father() {...}
    public Father (int num) {...}
    public override string ToString() { return "st=" + st + ", num=" + num; }
}
public class Son : Father {
    private char ch;
    public Son (int num, char ch) ...{...}
    public Son (int num) ...{...}
    public override string ToString() {...}
}

שישה תרשימי היררכיית ירושה ממוספרים 1-6, כל אחד שרשרת אנכית של עד 4 מהמחלקות A,B,C,D עם חצים חלולים כלפי מעלה (בן -> אב). לפי הצומת (2,3): D בראש עם שני בנים B ו-C.

6: A<-C<-D<-B
5: B<-A<-C<-D
4: A<-C<-B<-D
3: D<-{B,C}<-A (D בראש, B ו-C יורשים מ-D, A יורש מ-C)
2: A<-C<-{B,D}
1: C<-B<-{D,A}

תרשימי ההיררכיה 1–6 כפי שמודפסים בשאלון (עמוד 23)

סעיף א

לפניכם המחלקה Father ללא מימוש הפעולות הבונות, והמחלקה Son ללא מימוש הפעולות הבונות ופעולות toString. לפניכם קטע קוד והפלט שהתקבל בעקבות הרצת קטע הקוד. ממשו את הפעולות הבונות במחלקה Father ובמחלקה Son, ואת הפעולה toString במחלקה Son, בהתאם לעקרונות תכנות מונחה עצמים, כך שיתקבל הפלט הנתון.

סעיף ב(1)

נתונות המחלקות A,B,C,D והפעולה main במחלקה Tester, שרצה באופן תקין. לפניכם שישה תרשימי היררכייה 1-6 (החץ מסמן יחס ירושה). בנוגע לכל אחד מהם, ציינו אם ייתכן או לא ייתכן או לא ייתכן שהוא מתאר את היחס ההיררכייה בין המחלקות A,B,C,D. אם ציינתם שלא ייתכן, נמקו מדוע.

סעיף ב(2)

בסוף הפעולה main נוספו שורות הקוד שלהלן, שרצות באופן תקין: A a3 = new B(); D d1 = (D)a3; בעקבות זאת, האם תשתנה תשובתכם בתת-סעיף ב(1)? נמקו את תשובתכם.

סעיף ג

נתונה המחלקה BBB, היורשת ממחלקה AAA: [public class BBB extends AAA { private char ch; public BBB (int num, char ch) { super (num); this.ch = ch; } public BBB (char ch) {this.ch = ch;} public int gg (int val) {return super.gg(val) + num;} public int mm () {return AAA.c + 2;} public boolean nn () {return this.mm (10);} }]. כתבו במחלקה AAA את תכונות המחלקה (כולל הרשאות הגישה) ואת הכותרות של הפעולות הנדרשות כדי שהמחלקה BBB תהיה תקינה, בהתאם לעקרונות תכנות מונחה עצמים. אין צורך לממש את הפעולות שאת כותרתם הוספתם במחלקה AAA. אין לשנות את הקוד של המחלקה BBB.

public class AAA { ... }

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

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

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

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