סיכום – היררכיית עובדים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 26 מתוך 91.
אתגר
קלנבנה מערכת היררכיה של עובדים, המאגדת יחד את כל מושגי הירושה שלמדת בפרק הזה. תיצור מחלקת בסיס מופשטת שמגדירה מה חייב להיות לכל עובד, ואז תרחיב אותה באמצעות סוגי עובדים ייעודיים שמחשבים בונוסים בדרכים שונות.
תארגן את הקוד שלך בארבעה קבצים:
Employee.php: הגדר מחלקתEmployeeמופשטת שמשמשת בסיס לכל סוגי העובדים. עליה לכלול את המאפיינים המוגנים$nameו-$salary. הבנאי מקבל את שני הערכים ומגדיר אותם. כלול שיטהgetName()שמחזירה את השם, שיטהgetSalary()שמחזירה את המשכורת, ושיטה מופשטתcalculateBonus()שעל מחלקות הבת לממש. הוסף גם שיטהgetSummary()שמחזירה את"[name] earns $[salary] with bonus: $[bonus]", כאשר[bonus]הוא התוצאה של קריאה ל-calculateBonus().Manager.php: הגדר מחלקתManagerשמרחיבה אתEmployee. כלול את קובץ Employee בראש הקובץ. מנהלים מקבלים בונוס המבוסס על אחוזים. הוסף מאפיין מוגן$bonusPercentage. הבנאי צריך לקבל שם, משכורת ואחוז בונוס: השתמש ב-parent::__construct()עבור שני הערכים הראשונים, ואז הגדר בעצמך את האחוז. ממש אתcalculateBonus()כך שתחזיר את המשכורת כפול אחוז הבונוס, חלקי 100.Developer.php: הגדר מחלקתDeveloperשמרחיבה אתEmployee. כלול את קובץ Employee בראש הקובץ. מפתחים מקבלים בונוס קבוע על השלמת פרויקט. הוסף מאפיין מוגן$projectBonus. הבנאי צריך לקבל שם, משכורת וסכום בונוס לפרויקט: השתמש ב-parent::__construct()עבור שני הערכים הראשונים, ואז הגדר בעצמך את בונוס הפרויקט. ממש אתcalculateBonus()כך שפשוט תחזיר את סכום בונוס הפרויקט הקבוע.main.php: כלול את הקבצים של Manager ושל Developer. תקבל שש קלטים: שם המנהל, משכורת המנהל, אחוז הבונוס של המנהל, שם המפתח, משכורת המפתח ובונוס הפרויקט של המפתח. צורManagerו-Developerעם הערכים האלה. הדפס את התוצאה של קריאה ל-getSummary()עבור המנהל תחילה, ואז עבור המפתח, כל אחד בשורה משלו.
האתגר הזה מדגים כיצד מחלקות מופשטות אוכפות חוזה: כל עובד חייב להיות מסוגל לחשב את הבונוס שלו, אך לוגיקת החישוב משתנה לפי התפקיד. ה-Manager משתמש באחוז מהמשכורת שלו, ואילו ה-Developer מקבל סכום קבוע. השיטה המשותפת getSummary() במחלקת האב פועלת בצורה חלקה עם כל אחת משיטות חישוב הבונוס, באמצעות פולימורפיזם.
נסו בעצמכם
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// קרא את נתוני הקלט
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));
// TODO: צור אובייקט Manager עם נתוני הקלט של המנהל
// TODO: צור אובייקט Developer עם נתוני הקלט של המפתח
// TODO: הדפס את הסיכום של המנהל (getSummary())
// TODO: הדפס את הסיכום של המפתח (getSummary())
?>כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין