Menu
Coddy logo textTech

סיכום – היררכיית עובדים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 26 מתוך 91.

challenge icon

אתגר

קל

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

תארגן את הקוד שלך בארבעה קבצים:

  • 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())
?>

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין