Menu
Coddy logo textTech

Recapitulação - Hierarquia de Funcionários

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 26 de 91.

challenge icon

Desafio

Fácil

Vamos construir um sistema de hierarquia de funcionários que reúne todos os conceitos de herança que você aprendeu neste capítulo. Você criará uma classe base abstrata que define o que cada funcionário deve ter e, em seguida, a estenderá com tipos de funcionários especializados que calculam bônus de maneira diferente.

Você organizará seu código em quatro arquivos:

  • Employee.php — Defina uma classe abstrata Employee que serve como base para todos os tipos de funcionários. Ela deve ter as propriedades protegidas $name e $salary. O construtor aceita ambos os valores e os define. Inclua um método getName() que retorna o nome, um método getSalary() que retorna o salário e um método abstrato calculateBonus() que as classes filhas devem implementar. Adicione também um método getSummary() que retorna "[name] earns $[salary] with bonus: $[bonus]" onde [bonus] é o resultado da chamada de calculateBonus().
  • Manager.php — Defina uma classe Manager que estende Employee. Inclua o arquivo Employee no topo. Os gerentes recebem um bônus baseado em porcentagem. Adicione uma propriedade protegida $bonusPercentage. O construtor deve aceitar nome, salário e porcentagem de bônus — use parent::__construct() para os dois primeiros e, em seguida, defina a porcentagem você mesmo. Implemente calculateBonus() para retornar o salário multiplicado pela porcentagem de bônus dividida por 100.
  • Developer.php — Defina uma classe Developer que estende Employee. Inclua o arquivo Employee no topo. Os desenvolvedores recebem um bônus fixo por conclusão de projeto. Adicione uma propriedade protegida $projectBonus. O construtor deve aceitar nome, salário e valor do bônus do projeto — use parent::__construct() para os dois primeiros e, em seguida, defina o bônus do projeto você mesmo. Implemente calculateBonus() para simplesmente retornar o valor fixo do bônus do projeto.
  • main.php — Inclua os arquivos Manager e Developer. Você receberá cinco entradas: nome do gerente, salário do gerente, porcentagem de bônus do gerente, nome do desenvolvedor, salário do desenvolvedor e bônus de projeto do desenvolvedor. Crie um Manager e um Developer com esses valores. Imprima o resultado da chamada de getSummary() no gerente primeiro, depois no desenvolvedor, cada um em sua própria linha.

Este desafio demonstra como as classes abstratas impõem um contrato — cada funcionário deve ser capaz de calcular seu bônus, mas a lógica de cálculo varia de acordo com a função. O Manager usa uma porcentagem de seu salário, enquanto o Developer recebe um valor fixo. O método compartilhado getSummary() na classe pai funciona perfeitamente com qualquer cálculo de bônus através do polimorfismo.

Experimente você mesmo

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

// Ler as 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: Criar um objeto Manager com as entradas do gerente

// TODO: Criar um objeto Developer com as entradas do desenvolvedor

// TODO: Imprimir o resumo do gerente (getSummary())

// TODO: Imprimir o resumo do desenvolvedor (getSummary())
?>

Todas as lições de Programação Orientada a Objetos