מבוא לממשקים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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.
אתגר
קלבואו נבנה מערכת לשליטה במכשירים באמצעות הגדרת ממשקים שמתארים מה מכשירים שונים יכולים לעשות. האתגר הזה מתמקד ביצירת ממשקים: חוזים שמגדירים יכולות בלי לפרט איך הן פועלות.
תארגנו את הקוד שלכם בשלושה קבצים:
Switchable.java: צרו ממשק שמגדיר מה פירוש הדבר שמכשיר ניתן להפעלה ולכיבוי. כל מכשיר שניתן להפעלה ולכיבוי צריך להיות מסוגל להידלק ולהיכבות. הצהירו על שתי מתודות:turnOn()ו-turnOff(). זכרו, מתודות בממשק הן באופן משתמע ציבוריות ומופשטות, ולכן צריך לכתוב רק את חתימות המתודות.Adjustable.java: צרו ממשק נוסף שמגדיר מה פירוש הדבר שמכשיר ניתן לכוונון. מכשיר שניתן לכוונון צריך להיות מסוגל לקבוע את הרמה שלו. הצהירו על מתודהsetLevel(int level). הוסיפו גם קבועMAX_LEVELעם הערך100: זכרו שקבועים בממשקים הם באופן משתמעpublic static final.Main.java: הדגימו שהממשקים שלכם מוגדרים כראוי על ידי הדפסת מידע עליהם. תקבלו קלט אחד: ערך רמה (int). הדפיסו את שלוש השורות הבאות:Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax 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: " ואחריו רמת הקלט
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין