דילוג לתוכן הראשי

חוף 9.1.2020 ה' מחלקה אבסטרקטית, EmployeesProject

בכיתה
פעולה/מחלקה אבסטרקטית
1. מהי פעולה אבסטרקטית ומה השפעתה מבחינת המחלקה (שלא ניתן ליצור ממנה אובייקטים).
    מחלקה אבסטרקטית היא מחלקה רגילה שאסור לייצר ממנה עצמים.
    יש לה תכונות, קוד, פעולות, ירושות. הכל אותו הדבר כמו במחלקה רגילה.
    מחלקה ללא תכונות וללא קוד בגוף הפעולות שבה, מאפשרת לרשת ממנה, ונקראת ממשק.
    מחלקה מסוג ממשק היא "סופר וירטואלית" כיוון שאין בה קוד.
2. הצהרה על מחלקה כאבסטרקטית (לא ניתן יהיה ליצור ממנה אובייקטים).
3. פעולה אבסטרקטית במחלקה: בצירוף מלת-המפתח abstract. תהפוך כל המחלקה לאבסטרקטית.
    פעולה אבסטרקטית היא פעולה שאין בה קוד. רק חתימה עם ';' בסופה. כלומר, המחלקות היורשות
    ממנה חייבות לממשה. היא וירטואלית מעצם היותה אבסטרקטית, ולכן אסור לכתוב virtual.
    מי שיממש פעולה זו (שזה כל המחלקות היורשות), יממשה עם override, מלה שחובה לכתוב.
4. טיפים:
    א. ההבדל בין מצביע לייחוס (הפניה / Reference) ומדוע השימוש במונח "ייחוס" הוא נכון יותר.
    ב. שגיאת קומפילציה קל יותר לפתור מאשר שגיאת זמן ריצה.
    ג. מדוע אם יש במחלקה כלשהי פעולה אבסטרקטית אחת לפחות, אז המחלקה כולה אבסטרקטית?
       כיוון שאילו היינו יכולים ליצור ממנה אובייקט, הרי שהוא היה יכול לגשת לפעולה האבסטרקטית,
       אך מכיוון שהיא רק חתימה של פעולה, כלומר פעולה ללא קוד, היינו "נתקעים" בשגיאת זמן-ריצה.
       לכן, מנעו זאת מראש בכך שחייבו אותנו ליצור את המחלקה כאבסטרקטית.

תחילת עבודה על הפרויקט EmployeesProject
הנושאים: ירושת עובדים, virtual and override, הדפסת דו"חות, שמירת כמיסות, הוספת מחלקה במיקום 
מתאים בהיררכיה.
4. כתבו פרויקט חדש בשם EmployeesProject הכולל מחלקות ב- 4 "קומות" של היררכיה,
    צרו היררכיה זו בפרויקט שלכם לפי הכתוב להלן:
    מחלקת האב, שורש ההיררכיה - (רמה 0) Person
    תכונות:id, lastName, firstName, address.
    כפופה למחלקת האב של ההיררכיה - (רמה 1) Employee
    תכונות: empID, department.
    ומתחת ל- Employee שלוש המחלקות הבאות:
    (רמה 2) Worker
    תכונות: baseSalary, workingHours.
    (רמה 2) SalesMan
    תכונות: totalSales.
    (רמה 2) Manager
    תכונות: monthlySalary.
    בכפוף ל- Manager (רמה 3) קיימת המחלקה SeniorManager
    תכונות: bonus.

ב- Main
יצירת אוסף של Employees
5. נייצג אוסף מטיפוס Employee המכיל 10 מקומות. (צרו מערך מטיפוס Employee בגודל 10).
יצירת אובייקטים של עובדים בחברה
6. צרו שני אובייקטים חדשים מטיפוס Worker בשמות w1, w2.
7. צרו שני אובייקטים חדשים מטיפוס SalesMan בשם s1, s2.
8. צרו שני אובייקטים חדשים מטיפוס Manager בשם m1, m2.
9. צרו שני אובייקטים חדשים מטיפוס SeniorManager בשם sen1, sen2.
10. שימו לב: האינדקסים 8,9 במערך יישארו ריקים.
חישוב שכר לכל עובד
11. יש לחשב בלולאה את השכר החודשי שיש להעביר לכל עובד ועובד.
חישוב תוספת ליום-ההולדת
12. בחישוב יש להוסיף מתנת יום-הולדת של 300 ש"ח לכל עובד שיום הולדתו חל החודש.
      הערה: כדי לדעת אם החודש הנוכחי הוא חודש יום-הולדתו של העובד, נוסיף תכונה מטיפוס
      DateTime
 למחלקת Person. כדי לבנות תאריך, יש לשלוח 3 פרמטרים: הראשון הוא השנה, 
      השני הוא החודש, השלישי הוא היום.
חישוב תוספת וותק
13. כמו כן, כל עובד מקבל מענק המותנה בותק שלו: בתום כל 5 שנים בעבודה, מקבלים
      מענק של 1,000 ש"ח.
      (מי שסיים 5 שנים יקבל מענק בסך 1,000 ש"ח ומי שסיים 10 שנים יקבל מענק בסך 2,000 ש"ח).
      כל המשכורת הינה ברוטו ולכן יש לחשב גם את המס המופרש עבורה.
      (למען הפשטות נניח כי המס הוא תמיד 35% מהתשלום החודשי לעובד).
שמירת כמיסות
14. בהתאם לעקרונות מונחה עצמים, נשמור על הסגירות (Encapsulation) של המחלקות השונות,
      לכן, נימנע ככל האפשר משימוש בפעולות קובעות ומאחזרות (Set&Get).
      חישבו, איזה פעולות פנימיות יש להוסיף בכל פעם?
הדפסת דו"ח
15. יש להדפיס דו"ח משכורות המכיל את מספר העובדים הכולל, ולכל עובד את פרטיו האישיים,
      צורת חישוב המשכורת |(סוג העובד), וכן את משכורתו החודשית ברוטו ונטו.
      יש לחשב ולהדפיס מהו המס שהופרש מכל העובדים, ושאותו יש להעביר ישירות למס הכנסה.
הוספת סוג חדש של עובד
16. נסו להוסיף סוג חדש של עובדים, "מתנדבים" העובדים ללא שכר.
      והדפיסו את דו"ח השכר כולל ה"מתנדבים".
      חישבו: מה השינויים הנדרשים - "מחלקת החשבונות"?

לבית
1. סיימו הפרויקט EmployeesProject והכינו כל שאלותיכם.
    במידה ואינכם בטוחים באופן המימוש הרצוי, בצעו התרגיל לפי הבנתכם, וננתחו ביסודיות בשיעור הבא.