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

תוכן שנמחק תוכן שנוסף
Johnny Zoo (שיחה | תרומות)
אין תקציר עריכה
Johnny Zoo (שיחה | תרומות)
אין תקציר עריכה
שורה 124:
}
</source>
זהו המימוש של מוצר במכולת. המחלקה מכילה את כל השדות (המשתנים הפנימיים) והשיטות הדרושות לנו (כפי שפורטו למעלה). לשם הפשטות תאריך התפוגה נקבע באמצעות מספר שלם שסופר את הימים עד התפוגה. נראה כאן את קוד המחלקה האחראית על ניהול המלאי:<!-- המימוש הזה גרוע ולא שימושי, אבל הוא מתאים לצורך ההסבר. נא לא לשנות -->
<source lang = "java">
// Stock.java
שורה 210:
}
</source>
 
===אופן הפעולה===
שלושת המחלקות עובדות בתיאום, זו עם זו. המחלקה הראשונה, Item, אחראית על ייצוג המוצרים. כל אובייקט מסוג Item מייצג מוצר בודד. המחלקה השנייה, Stock, משתמשת במחלקה Item. היא מכילה שני שדות פנימיים מסוג Item, ומכאן שהיא מסוגלת להכיל שני מוצרים שונים. המחלקה האחרונה, Grocery, יוצרת אובייקט מלאי אחד (מסוג Stock), ומבצעת עליו פעולות שונות (ראו הסברים נוספים המופיעים בהערות).
 
====הפעלת אובייקטים====
המחלקה Grocery מעוניינת בשימוש באובייקט מלאי. לשם כך, נוצר אובייקט מטיפוס Stock בעזרת הבנאי הנתון של Stock, ואז ניתן היה לבצע על האובייקט החדש שיצרנו פעולות שונות. המחלקה Stock מקבלת אובייקטים מטיפוס Item כאשר נוספים מוצרים למלאי, אך הם לא נוצרים אצלה, אלא מתקבלים כארגומנט. עם זאת, הם אינם מתקבלים יש מאין - הם חייבים להיווצר במקום כלשהו. בתוכנית שלנו, יצירת האובייקטים האלה, מטיפוס Item, התבצעה בעזרת הבנאי שלהם בתוך המחלקה Grocery. כשרצינו לבצע פעולות על האובייקטים, פנינו אליהם כמו שכבר תואר. למשל, כדי לבצע את השיטה שמדפיסה מוצר על האובייקט _item1, השתמשנו בשורה
{{קוד|_<nowiki>item1.printItem();</nowiki>}}
הפעולה התבצעה על האובייקט המסויים _item1, והשתמשה בנתונים שלו. פעולה זהה על האובייקט _item1 ועל האובייקט _item2 לא תיתן תוצאה זהה, כי הנתונים של אובייקט _item1 שונים (בדרך כלל) מאלה של _item2.
 
====תקשורת בין מחלקות====
המחלקות אמנם מתקשרות ביניהן, אך אף מחלקה לא ניגשת בצורה ישירה לשדה של מחלקה אחרת, ואם יש צורך לדעת מה ערכו של שדה מסויים - קיימות שיטות מיוחדות לשם כך. בנוסף לזה, אפשר לראות שחלק מהמשתנים הוגדרו בעזרת המילה השמורה '''private'''. כל זה קשור לעיקרון הכימוס, שיוסבר בהמשך.
 
===הסבר===
ראינו כאן דוגמה, פשוטה יחסית, לתוכנית שנכתבה בצורה מונחית עצמים. המבנה שלנו מתחלק לשלושה חלקים נפרדים: המלאי, המוצרים, והמחלקה שמשתמשת במלאי. התוכנית הזו מדגימה את עיקרון המודולריות של התכנות מונחה העצמים: למרות קשרי הגומלין שמתקיימים בין המחלקות השונות, ניתן לשנות בקלות מחלקה אחת בלי להפריע לפעולת שאר המחלקות. נניח, לדוגמה, כי החלטנו לשנות את הצורה בה מודפסים פרטי כל מוצר. כל שצריך לעשות הוא לשנות את הקוד במקום אחד - בשיטה האחראית על הדפסת מוצר - והצורה בה מודפסים מוצרים תשתנה בכל מקום בתוכנית, בלי שנצטרך לשנות דבר נוסף. נניח כי נרצה לשנות את הצורה בה המלאי מחזיק את המוצרים ברשותו, למשל - לעבור לייצג את המוצרים בעזרת מערך - זה ידרוש עבודה רבה למדי בשיטות של המחלקה Stock, אבל המחלקה Item תוכל להישאר בדיוק כמו שהיא, וגם הלקוח הסופי שמשתמש במחלקה לא צריך לשנות דבר.