Enums ומתודות של Enum
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 50 מתוך 87.
enum (מנייה) הוא סוג מיוחד של מחלקה שמייצג קבוצה קבועה של קבועים. במקום להשתמש במספרים שלמים או במחרוזות שרירותיים כדי לייצג אפשרויות כמו ימות השבוע או מצבי הזמנה, enums מספקים ערכים קריאים ובטוחים מבחינת טיפוסים.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // מדפיס: MONDAYטיפוסים מונים הם יותר מקבועים פשוטים: הם מחלקות מלאות. אפשר להוסיף להם שדות, בנאים ומתודות:
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // מדפיס: 20כל enum מגיע עם מתודות שימושיות מובנות. המתודה values() מחזירה מערך של כל הקבועים, ואילו valueOf() ממירה מחרוזת לקבוע enum תואם. המתודה ordinal() מחזירה את המיקום של הקבוע (החל מ־0):
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // ממיר מחרוזת לערך enumטיפוסים מונים (Enums) הם אידיאליים כשיש לך קבוצה ידועה וקבועה של ערכים שלא תשתנה בזמן ריצה, והם הופכים את הקוד שלך לבטוח יותר ולמפורש יותר משימוש בקבועים רגילים.
אתגר
קלבואו נבנה מערכת הזמנות לבית קפה שמדגימה את העוצמה של enums עם שדות, בנאים ומתודות. תיצרו enum בשם CoffeeSize ששומר מידע על מחירים, וכן מערכת לעיבוד הזמנות של לקוחות.
תארגנו את הקוד בשלושה קבצים:
CoffeeSize.java: צרו enum שמייצג גדלים של קפה עם המחירים המתאימים. ה-enum שלכם צריך להכיל שלושה קבועים:SMALL,MEDIUMו-LARGE, עם המחירים2.50,3.50ו-4.50בהתאמה.לכל גודל צריך להיות שדה
priceפרטי (double), בנאי שיקבע את ערכו, ומתודהgetPrice()לאחזור שלו. הוסיפו גם מתודהgetDescription()שמחזירה מחרוזת בפורמט:[size name] - $[price](לדוגמה:SMALL - $2.5)Order.java: צרו מחלקה שמייצגת הזמנת קפה. ל-Order יש שני שדות פרטיים:customerName(String) ו-size(CoffeeSize). הוסיפו בנאי לאתחול שני השדות ומתודות getter לכל אחד מהם.הוסיפו מתודה
getReceipt()שמחזירה מחרוזת מרובת שורות:Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: הפיחו חיים בבית הקפה שלכם! יתקבלו שני קלטים: שם של לקוח (String) ושם של גודל (String כמו "SMALL", "MEDIUM", או "LARGE").תחילה, השתמשו ב-
CoffeeSize.valueOf()כדי להמיר את מחרוזת הגודל לקבוע enum המתאים. צרו Order עם שם הלקוח והגודל, ואז הדפיסו את הקבלה.לאחר הדפסת הקבלה, הדפיסו שורה ריקה, ואז הציגו את התפריט המלא באמצעות מעבר על כל הערכים של
CoffeeSizeבעזרת המתודהvalues(). עבור כל גודל, הדפיסו את התיאור שלו בשורה נפרדת.
יתקבלו שני קלטים לפי הסדר: שם הלקוח ושם הגודל (אחד מ-"SMALL", "MEDIUM", או "LARGE").
שימו לב איך ה-enum מאגד גם את זהות הגודל וגם את המחיר המתאים לו — פתרון נקי הרבה יותר משימוש בקבועים נפרדים או במספרי קסם לאורך הקוד שלכם!
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// קראו את נתוני הקלט
String customerName = scanner.nextLine();
String sizeName = scanner.nextLine();
// TODO: המירו את sizeName לערך מה-enum CoffeeSize באמצעות valueOf()
// TODO: צרו Order עם שם הלקוח והגודל
// TODO: הדפיסו את הקבלה
// TODO: הדפיסו שורה ריקה
// TODO: הציגו את התפריט המלא באמצעות מעבר על כל הערכים של CoffeeSize
// רמז: השתמשו ב-CoffeeSize.values() כדי לקבל את כל הקבועים של ה-enum
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין