נתונה היררכיית מחלקות: שלוש מחלקות Kid, Student, Worker ושלושה ממשקים ICanRead, ICanWrite, ICanSpeak. Kid ממשת ICanSpeak; Worker ממשת ICanRead ו-ICanSpeak; Student יורשת מ-Kid וממשת ICanWrite (וגם ICanRead — נדרש לתקינות הקוד בסעיף ב', ראו contentIssues). בכל מחלקה מוגדרת פעולה בונה ללא פרמטרים.
נתונה היררכיית מחלקות: שלוש מחלקות Kid, Student, Worker ושלושה ממשקים ICanRead, ICanWrite, ICanSpeak. Kid ממשת ICanSpeak; Worker ממשת ICanRead ו-ICanSpeak; Student יורשת מ-Kid וממשת ICanWrite (וגם ICanRead — נדרש לתקינות הקוד בסעיף ב', ראו contentIssues). בכל מחלקה מוגדרת פעולה בונה ללא פרמטרים.
תרשים UML נתון (עמוד 8 java / עמוד 23 csharp): שלושה ממשקים בשורה עליונה (ICanWrite{write()}, ICanRead{read()}, ICanSpeak{speak()}), מתחתם Kid{speak(),eat()} ו-Worker{read(),speak()}, ומתחת Student{write(),read(),sleep()}. חץ מלא (ירושה) מ-Student ל-Kid. חיצי מקווקו (מימוש ממשק) — הוסקו מהתרשים וממה שנדרש כדי שקטע הקוד בסעיף ב' יעבור קומפילציה: Kid⇢ICanSpeak; Worker⇢ICanRead, Worker⇢ICanSpeak; Student⇢ICanWrite. הקשר 'Student⇢ICanRead' (בנוסף לירושה מ-Kid) אינו ודאי-חד-משמעי מהתרשים המצויר בלבד, אך הוא הכרחי כדי שהשורה z.read() בסעיף ב' תתקמפל כאשר z מוצהר מטיפוס משותף ל-Student ול-Worker (הממשק המשותף היחיד שיש בו read() הוא ICanRead) — ראו contentIssues.
ICanWrite{write()} ICanRead{read()} ICanSpeak{speak()}
▲ ▲ ▲ ▲ ▲
| | \--(Worker) | |
(Student) (Student?) (Kid) (Worker)
Student --ירושה--> Kid
Kid{speak(),eat()} Worker{read(),speak()}
Student{write(),read(),sleep()}
לכל אחת מהמחלקות Kid, Student, Worker כתבו את כותרת המחלקה.
class Kid implements ICanSpeak class Worker implements ICanRead, ICanSpeak class Student extends Kid implements ICanWrite, ICanRead
השלימו את שלוש השורות (1)-(3) כך שקטע קוד שלפניכם יעבור בלי שגיאות קומפילציה וזמן ריצה: _(1) x = new Worker(); _(2) y = new Kid(); _(3) z = new Student(); x = y; y = new Student(); y.eat(); z.read(); ((Student)z).speak(); ((Kid)z).eat(); z = new Worker();
כתבו פעולה המקבלת כפרמטר מערך מטיפוס ICanSpeak. הפעולה תעבור על איברי המערך ותקרא לפעולה write(), אם היא קיימת בעבור העצם. אם הפעולה write() אינה קיימת – תיקרא הפעולה speak().
public static void writeOrSpeak(ICanSpeak[] arr)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.