Recapitulação - Hierarquia de Funcionários
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 24 de 70.
Desafio
FácilVamos construir um sistema de hierarquia de funcionários que reúne todos os conceitos de herança deste capítulo. Você criará uma estrutura de empresa onde diferentes tipos de funcionários compartilham atributos comuns, mas calculam seus bônus de forma diferente.
Você organizará seu código em quatro arquivos:
Employee.cs: Defina a classe baseEmployeeno namespaceCompany. Todo funcionário tem umName(string) eSalary(decimal). Crie um construtor que aceite ambos os valores. Adicione um métodovirtualchamadoCalculateBonus()que retorna 10% do salário por padrão. SobrescrevaToString()para retornar"{Name} - ${Salary}".Manager.cs: Defina uma classeManagerno namespaceCompanyque herda deEmployee. Gerentes têm uma propriedade adicionalTeamSize(int). O construtor deve aceitar nome, salário e tamanho da equipe, usandobasepara inicializar o pai. SobrescrevaCalculateBonus()para retornar 15% do salário mais $50 para cada membro da equipe. SobrescrevaToString()para retornar"{Name} - ${Salary} (Manager, Team: {TeamSize})".Developer.cs: Defina uma classeDeveloperno namespaceCompanyque herda deEmployee. Desenvolvedores têm uma propriedadeProgrammingLanguage(string). O construtor aceita nome, salário e linguagem de programação. SobrescrevaCalculateBonus()para retornar 12% do salário. SobrescrevaToString()para retornar"{Name} - ${Salary} (Developer, {ProgrammingLanguage})".Program.cs: No seu arquivo principal, crie um de cada tipo de funcionário usando valores de entrada. Armazene os três em um array de referências deEmployeepara demonstrar polimorfismo. Percorra o array e imprima o resultado doToString()de cada funcionário seguido pelo seu bônus.
Você receberá seis entradas:
- Nome do funcionário base
- Salário do funcionário base
- Nome do gerente
- Salário do gerente
- Tamanho da equipe do gerente
- Nome do desenvolvedor
- Salário do desenvolvedor
- Linguagem de programação do desenvolvedor
Imprima as informações e o bônus de cada funcionário neste formato:
{ToString result}
Bonus: ${CalculateBonus result}Por exemplo, se as entradas forem John, 50000, Sarah, 80000, 5, Mike, 70000, e C#, a saída deve ser:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400Observe como cada tipo de funcionário calcula os bônus de maneira diferente, mas você pode processá-los todos por meio de um único array de Employee. Este é o poder de combinar herança com polimorfismo!
Experimente você mesmo
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// Ler as entradas básicas do funcionário
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// Ler as entradas do gerente
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// Ler as entradas do desenvolvedor
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Criar um Employee, um Manager e um Developer
// TODO: Armazenar todos os três em um array de Employee para demonstrar polimorfismo
// TODO: Percorrer o array e imprimir o ToString() e o bônus de cada funcionário
// Formato:
// {resultado do ToString}
// Bonus: ${resultado do CalculateBonus}
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos