תכונות וכימוס המידע
תכונות (Attributes / Fields) הן המשתנים ששומרים את המידע או ה"מצב" של האובייקט. אחד מעקרונות הברזל של תכנות מונחה עצמים הוא כימוס (Encapsulation) - הסתרת מידע.
למה אנחנו צריכים את זה בכלל?
המטרה המרכזית של כימוס היא למנוע שימוש לא נכון במחלקה ולהגן על הנתונים מפני השמה של ערכים לא חוקיים.
יש הבדל עצום בין טווח הערכים שטיפוס המשתנה יכול להכיל, לבין טווח הערכים ההגיוני והחוקי עבור התכונה שלנו. לדוגמה, במחלקה Date (תאריך), תכונת החודש מוגדרת כ-int. הטיפוס int יכול להכיל מספרים כמו מיליון או מינוס 50, אבל בעולם האמיתי, חודש תקין הוא אך ורק מספר בין 1 ל-12.
❌ בלי כימוס (Public)
כל אחד יכול לגשת ישירות לתכונה מבחוץ ולהכניס "זבל" למערכת. הקומפיילר לא יעצור אותו כי מבחינתו 50 הוא int חוקי:
// שגיאה לוגית חמורה!
d.month = 50;
✅ עם כימוס (Private)
התכונה מוסתרת (Private). הגישה מותרת רק דרך פונקציה פנימית של המחלקה שמבצעת "בדיקת אבטחה":
if (m >= 1 && m <= 12)
this.month = m;
}
מתודות גישה: Getters & Setters
כדי לאפשר קריאה ועדכון של התכונות הפרטיות באופן בטוח, אנו מספקים מתודות "מתווכות":
- Getter (לקבלת הערך): הפונקציה תחזיר תמיד ערך מאותו הטיפוס של התכונה. אם החודש הוא
int, הפונקציהgetMonth()תחזירint. - Setter (לעדכון הערך): הפונקציה תקבל כפרמטר ערך מאותו הטיפוס של התכונה. היא תשמש כ"שער בידוק" שמוודא את תקינות הערך לפני שהוא מוצב בפועל בתכונה (כמו בדוגמה למעלה).
זהו המצב ההגיוני ביותר: הטיפוס של התכונה מכתיב את "שפת הדיבור" איתה. אם הנתון הוא מספר, נבקש ונקבל אותו כמספר, רק שמעכשיו אנחנו עושים זאת בצורה מבוקרת ומוגנת.