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 criar 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 todo funcionário deve ter e, em seguida, a estenderá com tipos especializados de funcionários que calculam bônus de maneiras diferentes.

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

  • Employee.php: Defina uma classe abstrata Employee que sirva 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 retorne o nome, um método getSalary() que retorne o salário e um método abstrato calculateBonus() que as classes filhas devem implementar. Adicione também um método getSummary() que retorne "[name] earns $[salary] with bonus: $[bonus]", em que [bonus] é o resultado da chamada de calculateBonus().
  • Manager.php: Defina uma classe Manager que estenda Employee. Inclua o arquivo Employee no início. Gerentes recebem um bônus baseado em porcentagem. Adicione uma propriedade protegida $bonusPercentage. O construtor deve aceitar nome, salário e porcentagem do 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 do bônus, dividido por 100.
  • Developer.php: Defina uma classe Developer que estenda Employee. Inclua o arquivo Employee no início. Desenvolvedores recebem um bônus fixo pela conclusão do 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 você mesmo o bônus do projeto. Implemente calculateBonus() para simplesmente retornar o valor fixo do bônus do projeto.
  • main.php: Inclua os arquivos Manager e Developer. Você receberá seis entradas: nome do gerente, salário do gerente, porcentagem do bônus do gerente, nome do desenvolvedor, salário do desenvolvedor e bônus do projeto do desenvolvedor. Crie um Manager e um Developer com esses valores. Imprima o resultado da chamada de getSummary() no gerente primeiro e, depois, no desenvolvedor, cada um em sua própria linha.

Este desafio demonstra como as classes abstratas impõem um contrato: todo 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 do próprio 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 por meio do polimorfismo.

Experimente você mesmo

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

// Ler 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 manager

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

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

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

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

Pratique por conta própria: Compilador de PHP online