חזרה – משתמש מאומת
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 63 מתוך 87.
אתגר
קלבואו נבנה מערכת מלאה לרישום משתמשים, שמאמתת נתוני קלט ומשתמשת בחריגות מותאמות אישית כדי לדווח בדיוק מה השתבש! תשלבו את כל מה שנלמד בפרק הזה: חריגות מסומנות ולא מסומנות מותאמות אישית, היררכיית החריגות, ו-try-with-resources עם מאמת שניתן לסגירה אוטומטית.
תארגנו את הקוד בחמישה קבצים:
ValidationException.java: צרו חריגה מסומנת שתשמש כבסיס לכל שגיאות האימות. החריגה צריכה לרשת מ-Exceptionולכלול בנאי שמקבל הודעה.InvalidUsernameException.java: צרו חריגה מסומנת עבור כשלים באימות שם המשתמש. היא צריכה לרשת מהמחלקהValidationExceptionשלכם, וכך ליצור היררכיית חריגות קטנה. כללו בנאי שמקבל הודעה ומעביר אותה למחלקת האב.InvalidAgeException.java: צרו חריגה לא מסומנת עבור שגיאות הקשורות לגיל (כמו גיל שלילי, שמייצג שגיאות תכנות). היא צריכה לרשת מ-RuntimeExceptionולכלול בנאי שמקבל הודעה.UserValidator.java: צרו מחלקה שמממשת אתAutoCloseableכדי לדמות הפעלת אימות שיש לסגור כראוי. המאמת שלכם צריך:להדפיס
Validator session startedבבנאי.להכיל מתודה
validateUsername(String username)שזורקתInvalidUsernameExceptionאם שם המשתמש הוא null, ריק או קצר מ-3 תווים (עם ההודעה"Username must be at least 3 characters"). אחרת, להדפיסUsername '[username]' is valid.להכיל מתודה
validateAge(int age)שזורקתInvalidAgeExceptionאם הגיל שלילי (עם ההודעה"Age cannot be negative: [age]"). אם הגיל קטן מ-13, לזרוקValidationExceptionעם ההודעה"Must be at least 13 years old". אחרת, להדפיסAge [age] is valid.לממש את
close()כדי להדפיסValidator session closed.Main.java: שלבו את מערכת האימות שלכם! תקבלו שני קלטים: שם משתמש (String) וגיל (מספר שלם).השתמשו ב-try-with-resources כדי ליצור
UserValidator. בתוך בלוק ה-try, אמתו תחילה את שם המשתמש, ולאחר מכן את הגיל. אם שניהם תקינים, הדפיסוUser registration successful!תפסו את
InvalidUsernameExceptionוהדפיסוUsername error: [message]. תפסו אתInvalidAgeExceptionוהדפיסוAge error: [message]. תפסו אתValidationException(מחלקת האב) והדפיסוValidation error: [message].המאמת צריך להיסגר אוטומטית, בלי קשר לשאלה אם האימות הצליח או נכשל!
תקבלו שני קלטים לפי הסדר: שם משתמש (String) וגיל (מספר שלם).
האתגר הזה משלב את כל הפרק: תבנו היררכיית חריגות שבה ValidationException היא מחלקת האב, תשתמשו כראוי בחריגות מסומנות ולא מסומנות, ותוודאו שמשאב המאמת שלכם תמיד משתחרר באמצעות try-with-resources. שימו לב: תפיסת מחלקת האב ValidationException אחרי מחלקת הבת שלה InvalidUsernameException מאפשרת לטפל תחילה במקרים מסוימים, ובמקביל לתפוס שגיאות אימות אחרות!
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// קראו את הקלטים
String username = scanner.nextLine();
int age = scanner.nextInt();
// TODO: השתמשו ב-try-with-resources כדי ליצור UserValidator
// בתוך בלוק ה-try:
// 1. אמתו את שם המשתמש
// 2. אמתו את הגיל
// 3. אם שניהם תקינים, הדפיסו "User registration successful!"
// TODO: תפסו את InvalidUsernameException והדפיסו "Username error: [message]"
// TODO: תפסו את InvalidAgeException והדפיסו "Age error: [message]"
// TODO: תפסו את ValidationException (מחלקת האב) והדפיסו "Validation error: [message]"
// הערה: המאמת צריך להיסגר אוטומטית, בין אם האימות הצליח ובין אם נכשל!
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית10טיפול בחריגות ב-OOP
היררכיית מחלקות החריגותחריגות מותאמות אישיתשגיאות Checked לעומת Uncheckedתבנית Try With Resourcesחזרה – משתמש מאומת2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין