תכנות מתקדם ב-Java/עבודה לפי ממשק: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
מאין תקציר עריכה
Johnny Zoo (שיחה | תרומות)
אין תקציר עריכה
שורה 1:
{{בעבודה}}
{{תכנות מתקדם ב-Java}}
בפרק הקודם ראינו כיצד יוצרים ומפעילים אובייקט. כעת נראה כמה היבטים נוספים בעקרונות התכנות מונחה העצמים.
 
שורה 15 ⟵ 16:
===מודולריות===
עבודה עם הסתרה מסייעת לנו לשנות בקלות רכיבים של תוכנית בלי להפריע לפעולת הרכיבים האחרים. נקודת המבט היא שה"לקוח" - המשתמש שמקבל את הקוד לשימושו - אינו מעוניין לדעת איך עובד הקוד. המשתמש מעוניין באובייקט שעושה את מלאכתו. לכן, כל עוד לא משנים את השיטות הציבוריות ניתן לשנות את הדרך בה הן עובדות, בלי צורך לבצע שינויים במקומות רבים בתוכנית.
 
==כיצד זה עובד==
===הרשאה ציבורית ופרטית===
המימוש של הכימוס בג'אווה הוא פשוט מאוד: כל פריט במחלקה שאינו צריך להיות נגיש למחלקות אחרות - נגדיר כפרטי, בעזרת המילה השמורה {{קוד בשורה|private}}. פריטים כאלו יהיו מרבית המשתנים הפנימיים, שיטות שדרושות רק לצורך המחלקה וכדומה. שיטות ציבוריות נגדיר בעזרת המילה השמורה {{קוד בשורה|public}}. פריטים כאלו יהיו בנאים, שיטות, וקבועים שאנחנו מעוניינים לאפשר אליהם נגישות. קיימים גם מצבי ביניים: package ו-protected. בשלב זה לא נעסוק בהם.
 
===getters/setters===
כדי לאפשר גישה למשתנים פנימיים, אך עדיין להגן על המידע משינויים לא תקינים, נהוג לבנות שיטות ציבוריות מסוג get ו-set כדי לקבל ולשנות באופן מבוקר ערכים של משתנים פנימיים. נראה כאן דוגמה מתוכנית המכולת:
<source lang = "java">
// Get item's name
public String getName() {
return _name;
}
</source>
 
====יתרונות====
# אם יש צורך שכל שינוי במשתנה יגרור שינויים נוספים - ניתן לבצע זאת בעזרת שיטת ה-set.
# כאשר מחזירים משתנים פרימיטיביים, חוזר עותק של המשתנה ולא המקור (החזרה של ערך המשתנה ולא של המתשנה עצמו - By value). לכן, לא ניתן לשנות ערכים של המחלקה בעזרת שינוי התוצאה המתקבלת בעזרת get.
 
{{הארה|בחלק מסביבות העבודה ניתן ליצור את שיטות ה-get וה-set באופן אוטומטי.}}
 
==עבודה על פי חוזה==
אם מתכנתים על פי עיקרון הכימוס, ניתן ליצור מעין אוסף מוסכם של שיטות ומשתנים שיהיו נגישים ל"לקוח" שמשתמש בקוד שכתבנו. הלקוח אינו מתעניין באופן בו מימשנו את המחלקה שלנו - הלקוח מעוניין במחלקה המסוגלת לבצע ללא טעויות את מה שנרשם ב"חוזה".