נתונה היררכיית מחלקות: שלוש מחלקות 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 : ICanSpeak class Worker : ICanRead, ICanSpeak class Student : Kid, 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)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.