נתונה היררכיית המחלקות הבאה הכוללת שלוש מחלקות Kid, Student, Worker ושלושה ממשקים ICanRead, ICanWrite, ICanSpeak:
תרשים ה-UML (חץ מלא = ירושה, חץ מקווקו = מימוש ממשק):
- ICanWrite:
void write()· ICanRead:void read()· ICanSpeak:void speak()(ממשקים). - Kid:
void speak(),void eat()— חץ מקווקו אל ICanSpeak. - Worker:
void read(),void speak()— חצים מקווקוים אל ICanRead ואל ICanSpeak. - Student:
void write(),void read(),void sleep()— חץ מלא אל Kid, וחצים מקווקוים אל ICanWrite ואל ICanRead.
ICanWrite{write()} ICanRead{read()} ICanSpeak{speak()}
Kid{speak(),eat()} ┄┄▷ ICanSpeak
Worker{read(),speak()} ┄┄▷ ICanRead, ICanSpeak
Student{write(),read(),sleep()} ──▶ Kid ┄┄▷ ICanWrite, ICanRead
בכל מחלקה מוגדרת פעולה בונה ללא פרמטרים.
סעיף א
לכל אחת מהמחלקות Kid, Student, Worker כתבו את כותרת המחלקה.
סעיף ב
השלימו את שלוש השורות (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)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.