Menu
Coddy logo textTech

מבוא לממשקים

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

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

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

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

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

ממשקים מוכרזים באמצעות מילת המפתח interface במקום class. כל המתודות בממשק הן באופן משתמע public ו-abstract, ולכן אין צורך לכתוב את מילות המפתח האלה:

public interface Playable {
    void play();    // מוגדר במשתמע כ-public abstract
    void pause();
    void stop();
}

ממשקים יכולים גם להצהיר על קבועים, שהם public static final באופן משתמע:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // באופן משתמע public static final
}

בשיעור הבא תלמד איך מחלקות מממשות ממשקים באמצעות מילת המפתח implements.

challenge icon

אתגר

קל

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

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

  • Switchable.java: צרו ממשק שמגדיר מה פירוש הדבר שמכשיר ניתן להפעלה ולכיבוי. כל מכשיר שניתן להפעלה ולכיבוי צריך להיות מסוגל להידלק ולהיכבות. הצהירו על שתי מתודות: turnOn() ו-turnOff(). זכרו, מתודות בממשק הן באופן משתמע ציבוריות ומופשטות, ולכן צריך לכתוב רק את חתימות המתודות.
  • Adjustable.java: צרו ממשק נוסף שמגדיר מה פירוש הדבר שמכשיר ניתן לכוונון. מכשיר שניתן לכוונון צריך להיות מסוגל לקבוע את הרמה שלו. הצהירו על מתודה setLevel(int level). הוסיפו גם קבוע MAX_LEVEL עם הערך 100: זכרו שקבועים בממשקים הם באופן משתמע public static final.
  • Main.java: הדגימו שהממשקים שלכם מוגדרים כראוי על ידי הדפסת מידע עליהם. תקבלו קלט אחד: ערך רמה (int). הדפיסו את שלוש השורות הבאות:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (גשו לקבוע מתוך הממשק Adjustable)
    לאחר מכן הדפיסו: Setting level to: [input level]

תקבלו קלט אחד: ערך רמה (int).

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

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: הדפס מידע על הממשקים
        // הדפס: "Switchable methods: turnOn, turnOff"
        // הדפס: "Adjustable methods: setLevel"
        // הדפס: "Max level constant: " ואחריו Adjustable.MAX_LEVEL
        // הדפס: "Setting level to: " ואחריו רמת הקלט
        
    }
}
quiz iconבחנו את עצמכם

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

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

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