ברוכים הבאים ליחידת הלימוד הראשונה בקורס "תכנות מתקדם בשפת Java". יחידה זו מהווה סקירה מעמיקה של עקרונות תכנות מונחה עצמים (OOP) ב-Java, תוך התמקדות במושגי יסוד החיוניים להבנת נושאים מתקדמים בהמשך הקורס. נחזק את הבנתנו במחלקות ואובייקטים, בנאים וכימוס, הפשטה והסתרת מידע, ונסקור בקצרה את תפקידה של המכונה הווירטואלית של Java (JVM).
עקרונות הליבה של תכנות מונחה עצמים ב-Java
תכנות מונחה עצמים (OOP) הוא פרדיגמת תכנות המבוססת על הרעיון של "אובייקטים", שיכולים להכיל נתונים (שדות) וקוד (מתודות). ב-Java, כל קוד מבוצע בהקשר של מחלקה ואובייקטים.
מחלקות ואובייקטים
new.לדוגמה, מחלקה Car יכולה להגדיר תכונות כמו color ו-model, ומתודות כמו startEngine(). אובייקט ספציפי myCar יהיה מופע של המחלקה Car עם צבע "אדום" ומודל "סופרה".
בנאים, כימוס והסתרת מידע
יצירת אובייקטים וניהול הגישה לנתונים הפנימיים שלהם הם אבני יסוד בתכנון OOP.
בנאים (Constructors)
new). תפקידו העיקרי הוא לאתחל את מצבו הראשוני של האובייקט, כלומר להקצות ערכים לשדותיו.לכל מחלקה יש בנאי אחד לפחות. אם לא נגדיר בנאי במפורש, Java תספק בנאי ברירת מחדל (default constructor) ללא פרמטרים. ניתן להגדיר מספר בנאים עם חתימות שונות (overloading).
כימוס (Encapsulation) והסתרת מידע (Information Hiding)
ב-Java, אנו משתמשים במגדירי גישה (access modifiers) כדי ליישם הסתרת מידע:
public
גישה מכל מקום. משמש בדרך כלל למתודות המהוות את הממשק הציבורי של המחלקה.
private
גישה מוגבלת רק מתוך המחלקה עצמה. משמש בדרך כלל לשדות המחלקה כדי להבטיח כימוס.
protected
גישה מתוך המחלקה, מחלקות יורשות ובאותה חבילה (package).
(default)
גישה רק מתוך אותה חבילה. אין מילת מפתח מפורשת.
מבוא ל-JVM (Java Virtual Machine)
אחד ממאפייניה הייחודיים של Java הוא יכולתה לרוץ על פלטפורמות שונות ללא צורך בהידור מחדש. יכולת זו מתאפשרת בזכות ה-JVM.
כאשר קוד Java נכתב, הוא מהודר ל-bytecode. ה-JVM קורא את ה-bytecode, מאמת אותו, ומבצע אותו על המערכת הספציפית. ה-JVM כולל רכיבים כמו Class Loader, Bytecode Verifier, JIT (Just-In-Time) Compiler שממיר bytecode לקוד מכונה בזמן ריצה לשיפור ביצועים, ו-Garbage Collector לניהול זיכרון אוטומטי.
שאלות לדיון
- מדוע כימוס נחשב לאבן יסוד בתכנון תוכנה חזק ויציב? תן דוגמה.
- כיצד נבדלים בנאים ממתודות רגילות, ומהו תפקידם העיקרי בהקשר של אובייקטים?
- הסבר את עקרון "כתוב פעם אחת, הרץ בכל מקום" (WORA) בהקשר של Java וה-JVM.
- הצג תרחיש שבו הסתרת מידע לקויה עלולה להוביל לבעיות תחזוקה משמעותיות בקוד.
נקודות לתשובת מודל
- כימוס: שומר על שלמות הנתונים, מפחית צימוד בין רכיבים, מאפשר שינויים פנימיים ללא השפעה חיצונית, ומקל על תחזוקה ובדיקות. לדוגמה, שדה
ageפרטי עם מתודתsetAgeהמבצעת ולידציה. - בנאים: בעלי שם זהה למחלקה, ללא סוג החזרה, נקראים עם
new, ותפקידם לאתחל את מצב האובייקט בעת יצירתו. מתודות רגילות מבצעות פעולות על אובייקט קיים. - WORA & JVM: קוד Java נכתב פעם אחת, מהודר ל-bytecode נייטרלי לפלטפורמה. ה-JVM, המותקן על כל פלטפורמה, מפרש ומריץ את ה-bytecode, ובכך מבודד את הקוד מהחומרה ומערכת ההפעלה הספציפית.
- הסתרת מידע לקויה: חשיפת שדות פנימיים (לדוגמה, שדה
balanceבחשבון בנק כ-public) מאפשרת שינוי ישיר ולא מבוקר של הנתונים, מה שעלול להוביל למצב לא עקבי או שגוי של האובייקט ולפגוע בלוגיקה העסקית.