Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - هيكلية الموظفين

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 26 من 91.

challenge icon

التحدي

سهل

دعونا نبني نظام تسلسل هرمي للموظفين يجمع كل مفاهيم الوراثة التي تعلمتها في هذا الفصل. ستقوم بإنشاء فئة أساسية مجردة (abstract base class) تحدد ما يجب أن يمتلكه كل موظف، ثم تقوم بتوسيعها بأنواع موظفين متخصصين يحسبون المكافآت بشكل مختلف.

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • Employee.php — قم بتعريف فئة مجردة Employee تعمل كأساس لجميع أنواع الموظفين. يجب أن تحتوي على خصائص محمية (protected) وهي $name و $salary. يقبل المنشئ (constructor) كلتا القيمتين ويقوم بتعيينهما. قم بتضمين طريقة 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() المشتركة في الفئة الأب بسلاسة مع أي من حسابات المكافآت من خلال تعدد الأشكال (polymorphism).

جرّب بنفسك

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

جميع دروس Object Oriented Programming