Menu
Coddy logo textTech

Resumen - Jerarquía de empleados

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 26 de 91.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de jerarquía de empleados que reúna todos los conceptos de herencia que has aprendido en este capítulo. Crearás una clase base abstracta que defina lo que todo empleado debe tener, y luego la extenderás con tipos de empleados especializados que calculan los bonos de manera diferente.

Organizarás tu código en cuatro archivos:

  • Employee.php — Define una clase abstracta Employee que sirva como base para todos los tipos de empleados. Debe tener propiedades protegidas $name y $salary. El constructor acepta ambos valores y los asigna. Incluye un método getName() que devuelva el nombre, un método getSalary() que devuelva el salario y un método abstracto calculateBonus() que las clases hijas deben implementar. También añade un método getSummary() que devuelva "[name] earns $[salary] with bonus: $[bonus]" donde [bonus] es el resultado de llamar a calculateBonus().
  • Manager.php — Define una clase Manager que extienda de Employee. Incluye el archivo Employee al principio. Los gerentes reciben un bono basado en un porcentaje. Añade una propiedad protegida $bonusPercentage. El constructor debe aceptar el nombre, el salario y el porcentaje de bono — usa parent::__construct() para los dos primeros, luego asigna el porcentaje tú mismo. Implementa calculateBonus() para devolver el salario multiplicado por el porcentaje de bono dividido por 100.
  • Developer.php — Define una clase Developer que extienda de Employee. Incluye el archivo Employee al principio. Los desarrolladores reciben un bono fijo por finalización de proyecto. Añade una propiedad protegida $projectBonus. El constructor debe aceptar el nombre, el salario y el monto del bono por proyecto — usa parent::__construct() para los dos primeros, luego asigna el bono por proyecto tú mismo. Implementa calculateBonus() para que simplemente devuelva el monto fijo del bono por proyecto.
  • main.php — Incluye tanto el archivo Manager como el de Developer. Recibirás cinco entradas: nombre del gerente, salario del gerente, porcentaje de bono del gerente, nombre del desarrollador, salario del desarrollador y bono por proyecto del desarrollador. Crea un Manager y un Developer con estos valores. Imprime el resultado de llamar a getSummary() primero para el gerente, luego para el desarrollador, cada uno en su propia línea.

Este desafío demuestra cómo las clases abstractas imponen un contrato: cada empleado debe poder calcular su bono, pero la lógica de cálculo varía según el rol. El Manager utiliza un porcentaje de su salario, mientras que el Developer obtiene una cantidad fija. El método compartido getSummary() en la clase padre funciona a la perfección con cualquiera de los cálculos de bonos a través del polimorfismo.

Pruébalo tú mismo

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// Leer entradas
$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: Crear un objeto Manager con las entradas del gerente

// TODO: Crear un objeto Developer con las entradas del desarrollador

// TODO: Imprimir el resumen del gerente (getSummary())

// TODO: Imprimir el resumen del desarrollador (getSummary())
?>

Todas las lecciones de Programación Orientada a Objetos