Menu
Coddy logo textTech

Repaso - 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

Construyamos 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 define lo que todo empleado debe tener y, después, la extenderás con tipos de empleados especializados que calculan las bonificaciones de manera diferente.

Organizarás tu código en cuatro archivos:

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

Este desafío demuestra cómo las clases abstractas hacen cumplir un contrato: todo empleado debe poder calcular su bonificación, pero la lógica de cálculo varía según el puesto. El Manager utiliza un porcentaje de su salario, mientras que el Developer recibe un importe fijo. El método compartido getSummary() de la clase principal funciona perfectamente con cualquiera de los dos cálculos de bonificación mediante el 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 manager

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

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

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

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online