שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2025 - פולימורפיזם
נתון פרויקט הבא.
הפרויקט נתון בשלמותו.
נתון כי הפרויקט תקין, כלומר, מתקמפל ורץ ללא שגיאות.
איתי טוען שהעיצוב של הפרויקט שגוי.
האם עידו צודק?
כן | לא | לא ניתן להכריע
נמקו בקצרה את תשובתכם.
הפרויקט נתון בשלמותו.
נתון כי הפרויקט תקין, כלומר, מתקמפל ורץ ללא שגיאות.
איתי טוען שהעיצוב של הפרויקט שגוי.
האם עידו צודק?
כן | לא | לא ניתן להכריע
נמקו בקצרה את תשובתכם.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2025סמסטר א
★★★★★
פולימורפיזםממשקיםמחלקותאובייקטים
שימו לב לדמיון הרב בין המתודות
playSongs ו-playVideos במחלקה Player. האם ניתן לאחד אותן באמצעות עקרונות של תכנות מונחה עצמים?כן, איתי צודק. העיצוב של הפרויקט שגוי. הסיבה המרכזית היא שכפול קוד (Code Duplication) במחלקה
Player. המתודות playSongs ו-playVideos מכילות לוגיקה כמעט זהה, כאשר ההבדל היחיד ביניהן הוא סוג המערך שהן מקבלות (MP3Song[] לעומת VideoClip[]). שכפול קוד כזה מקשה על תחזוקה והרחבה של המערכת. למשל, אם נרצה להוסיף סוג מדיה חדש (כמו Podcast), נצטרך להוסיף מתודה שלישית שתשכפל שוב את אותה הלוגיקה. הפתרון הנכון מבחינת תכנות מונחה עצמים הוא להשתמש בפולימורפיזם. ניתן להגדיר ממשק (interface) משותף, למשל Playable, שיכיל את המתודה play(). לאחר מכן, המחלקות MP3Song ו-VideoClip יממשו את הממשק הזה. כך, נוכל להחליף את שתי המתודות ב-Player במתודה אחת, playMedia(Playable[] media), שתקבל מערך של אובייקטים מכל סוג המממש את הממשק Playable ותפעיל עליהם את הלוגיקה המשותפת.