כדי לנהל את האירועים שלה בנתה חברת Date חברה יומן Date - מחלקה: day, month, year, ולה שלוש תכונות: תאריך. נוסף על כך, לצורך ניהול האירועים נבנתה המחלקה Event - אירוע. לחברה יש שלושה סוגי אירועים: פגישות (Meeting), שיחות טלפון (PhoneCall), ומשימה (Task). כדי לשמור את המידע על כל סוג אירוע, בנתה המחלקות המתאימות (התכונות של הפגישה - שם, פגישה, שיחות טלפון - בטבלה). נוסף על המחלקות האמורות, נבנתה המחלקה Diary - יומן, ולה תכונה נוספת arr בגודל 1,000 מטיפוס Event, השומרת עד 1,000 אירועים. התרשים (Diary מכילה Event; Meeting/PhoneCall/Task יורשות מ-Event) נתון בשאלון.
כדי לנהל את האירועים שלה בנתה חברת Date חברה יומן Date - מחלקה: day, month, year, ולה שלוש תכונות: תאריך. נוסף על כך, לצורך ניהול האירועים נבנתה המחלקה Event - אירוע. לחברה יש שלושה סוגי אירועים: פגישות (Meeting), שיחות טלפון (PhoneCall), ומשימה (Task). כדי לשמור את המידע על כל סוג אירוע, בנתה המחלקות המתאימות (התכונות של הפגישה - שם, פגישה, שיחות טלפון - בטבלה). נוסף על המחלקות האמורות, נבנתה המחלקה Diary - יומן, ולה תכונה נוספת arr בגודל 1,000 מטיפוס Event, השומרת עד 1,000 אירועים. התרשים (Diary מכילה Event; Meeting/PhoneCall/Task יורשות מ-Event) נתון בשאלון.
// תרשים חלקי (UML): Diary מכילה (composition, מעוין מלא) Event; Event הוא סוג-על (הכללה) של Meeting, PhoneCall, Task.
// נתון: כל שלושת סוגי האירוע (Meeting, PhoneCall, Task) זקוקים לשני שדות משותפים: date (Date) ו-hour (int, שעת ההתחלה).
// לפי עקרונות תכנות מונחה עצמים, שדות משותפים אלה שייכים למחלקת-העל Event (זו בדיוק המשמעות של "הוסף את התכונות" בסעיף א).
//
// Meeting (פגישה): arrNames - מערך שמות המשתתפים (מטיפוס String[], גודלו כמספר המשתתפים); duration - משך הפגישה בדקות; location - מקום הפגישה.
// PhoneCall (שיחת טלפון): phoneNumber - מספר הטלפון (String); name - שם האדם שאליו מתקשרים (String).
// Task (משימה): title - כותרת המשימה (String).
// Diary (יומן): arr - מערך בגודל 1,000 מטיפוס Event, השומר עד 1,000 אירועים.
תרשים UML: Diary מכילה (composition) Event; Meeting, PhoneCall, Task יורשות (generalization) מ-Event
Diary <>---- Event
^
+-------+-------+
Meeting PhoneCall Task
העתק את התרשים למחברתך והוסף את המחלקה Date לתרשים. כתוב את כותרת המחלקה Event ואת התכונות שלה. הנח שבשאר התכונות הכתובות התואמות, ושבכל המחלקות יש פעולות בונות ופעולות get/set.
כתוב במחלקה Diary פעולה ששמה allCalls (Java) / AllCalls (C#) המקבלת עם מטיפוס Date, ומחזירה מערך מטיפוס PhoneCall בגודל 100, המכיל את כל שיחות הטלפון בתאריך date. שים לב: נתונה (זמינה לשימוש בלי לממש) הפעולה same/Same במחלקה Date, המחזירה true אם התאריך הנוכחי זהה ל-other. הנח שיש בדיוק 100 שיחות טלפון בתאריך date, וכי בעת הקריאה לפעולה זו מערך האירועים arr במחלקה Diary מלא בעצמים (ללא null).
public PhoneCall[] allCalls (Date date)
לפניך כותרת הפעולה הפנימית match (Java) / Match (C#) במחלקה Event: זימון הפעולה יחזיר true אם האירוע הוא פגישה (Meeting) שבה משתתף אדם ששמו זהה ל-name, או אם האירוע הוא שיחת טלפון (PhoneCall) עם אדם ששמו זהה ל-name, אחרת יחזיר false. ממש את הפעולה, והוסף פעולות למחלקות המתאימות כדי לבצע את הנדרש. ציין בעבור כל פעולה באיזו מחלקה היא נוספת. הערה: בסעיף זה, אין להשתמש בפעולה instanceof ובפעולות של המחלקה Object.
public boolean match (String name)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.