Menu
Coddy logo textTech

יסודות העמסת מתודות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 28 מתוך 87.

פולימורפיזם פירושו "צורות רבות". ב-Java, הוא מאפשר לאובייקטים להתנהג בדרכים שונות בהתאם להקשר. אחת מצורות הפולימורפיזם היא העמסת מתודות, שנקראת גם פולימורפיזם בזמן הידור, משום ש-Java קובעת איזו מתודה להפעיל במהלך ההידור.

העמסת מתודות מאפשרת לך להגדיר כמה מתודות עם אותו שם אבל פרמטרים שונים. המהדר מבחין ביניהן על סמך מספר הפרמטרים, הסוג שלהם או הסדר שלהם:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

כשקוראים ל־add(5, 3),‏ Java משתמשת בשיטה הראשונה. קריאה ל־add(5, 3, 2) מפעילה את השנייה, ו־add(5.0, 3.0) מפעילה את השלישית. המהדר בוחר בגרסה המתאימה על סמך הארגומנטים שסיפקת.

שימו לב ששינוי של טיפוס ההחזרה בלבד אינו העמסת יתר תקפה. רשימת הפרמטרים חייבת להיות שונה:

// זו אינה העמסת מתודות תקינה - הקוד לא יתקמפל
public int getValue() { return 1; }
public double getValue() { return 1.0; }  // שגיאה!

כבר ראית העמסת יתר בעבר, בהעמסת יתר של בנאים. העמסת מתודות פועלת לפי אותם כללים ומספקת גמישות בכך שהיא מאפשרת למתודה אחת לטפל בתרחישי קלט שונים.

challenge icon

אתגר

קל

בואו נבנה מעצב הודעות שמדגים העמסת מתודות באמצעות מתן כמה דרכים לעצב הודעות. תיצרו מחלקת עזר עם כמה מתודות format מועמסות, שמטפלות בתרחישי קלט שונים.

תארגנו את הקוד שלכם בשני קבצים:

  • MessageFormatter.java: צרו מחלקה שמספקת עיצוב הודעות גמיש באמצעות מתודות מועמסות. המעצב שלכם צריך לכלול:
    • מתודה format(String message) שמחזירה את ההודעה כשהיא מוקפת בסוגריים מרובעים: [message]
    • מתודה format(String message, int repeatCount) שמחזירה את ההודעה כשהיא חוזרת מספר הפעמים שצוין, עם רווחים ביניהן
    • מתודה format(String message, String prefix) שמחזירה את ההודעה עם הקידומת המצורפת אליה: prefix: message
    • מתודה format(String message, String prefix, String suffix) שמחזירה: prefix: message (suffix)
    המהדר יבחר את המתודה הנכונה על סמך הארגומנטים שתעבירו — כך פועל פולימורפיזם בזמן קומפילציה!
  • Main.java: הדגימו כיצד כל ארבע המתודות המועמסות פועלות יחד. תקבלו ארבעה קלטים: הודעה (String), מספר חזרות (int), קידומת (String) וסיומת (String). צרו MessageFormatter וקראו לכל אחת מהגרסאות של המתודה format, תוך הדפסת כל תוצאה בשורה נפרדת:
    • ראשית, עצבו את ההודעה בלבד
    • שנית, עצבו את ההודעה ואת מספר החזרות
    • שלישית, עצבו את ההודעה ואת הקידומת
    • רביעית, עצבו את ההודעה, הקידומת והסיומת

תקבלו ארבעה קלטים: טקסט ההודעה, מספר הפעמים לחזור עליה, מחרוזת קידומת ומחרוזת סיומת.

לדוגמה, אם ההודעה היא "Hello", מספר החזרות הוא 3, הקידומת היא "INFO" והסיומת היא "done", הפלט שלכם אמור להציג ארבע גרסאות מעוצבות ושונות של אותה הודעה, כאשר כל אחת מהן משתמשת במתודה מועמסת אחרת!

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // קראו את הקלטים
        String message = scanner.nextLine();
        int repeatCount = Integer.parseInt(scanner.nextLine());
        String prefix = scanner.nextLine();
        String suffix = scanner.nextLine();
        
        // TODO: צרו אובייקט מסוג MessageFormatter
        
        // TODO: קראו ל־format עם message בלבד והדפיסו את התוצאה
        
        // TODO: קראו ל־format עם message ו־repeatCount והדפיסו את התוצאה
        
        // TODO: קראו ל־format עם message ו־prefix והדפיסו את התוצאה
        
        // TODO: קראו ל־format עם message, prefix ו־suffix והדפיסו את התוצאה
        
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין