Resumen: Jerarquía de empleados
Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 24 de 70.
Desafío
FácilVamos a construir un sistema de jerarquía de empleados que reúna todos los conceptos de herencia de este capítulo. Crearás una estructura de empresa donde diferentes tipos de empleados comparten atributos comunes pero calculan sus bonificaciones de manera diferente.
Organizarás tu código en cuatro archivos:
Employee.cs: Define la clase baseEmployeeen el espacio de nombresCompany. Cada empleado tiene unName(string) y unSalary(decimal). Crea un constructor que acepte ambos valores. Agrega un métodovirtualllamadoCalculateBonus()que devuelva el 10% del salario por defecto. SobrescribeToString()para que devuelva"{Name} - ${Salary}".Manager.cs: Define una claseManageren el espacio de nombresCompanyque herede deEmployee. Los gerentes tienen una propiedad adicionalTeamSize(int). El constructor debe aceptar el nombre, el salario y el tamaño del equipo, utilizandobasepara inicializar al padre. SobrescribeCalculateBonus()para devolver el 15% del salario más $50 por cada miembro del equipo. SobrescribeToString()para que devuelva"{Name} - ${Salary} (Manager, Team: {TeamSize})".Developer.cs: Define una claseDeveloperen el espacio de nombresCompanyque herede deEmployee. Los desarrolladores tienen una propiedadProgrammingLanguage(string). El constructor acepta el nombre, el salario y el lenguaje de programación. SobrescribeCalculateBonus()para devolver el 12% del salario. SobrescribeToString()para que devuelva"{Name} - ${Salary} (Developer, {ProgrammingLanguage})".Program.cs: En tu archivo principal, crea uno de cada tipo de empleado utilizando los valores de entrada. Almacena los tres en un arreglo de referencias deEmployeepara demostrar el polimorfismo. Recorre el arreglo e imprime el resultado delToString()de cada empleado seguido de su bonificación.
Recibirás seis entradas:
- Nombre del empleado base
- Salario del empleado base
- Nombre del gerente
- Salario del gerente
- Tamaño del equipo del gerente
- Nombre del desarrollador
- Salario del desarrollador
- Lenguaje de programación del desarrollador
Imprime la información y la bonificación de cada empleado en este formato:
{ToString result}
Bonus: ${CalculateBonus result}Por ejemplo, si las entradas son John, 50000, Sarah, 80000, 5, Mike, 70000, y C#, la salida debería ser:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400Observa cómo cada tipo de empleado calcula las bonificaciones de manera diferente, y aun así puedes procesarlos a todos a través de un único arreglo de Employee. ¡Este es el poder de combinar la herencia con el polimorfismo!
Pruébalo tú mismo
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// Leer las entradas básicas del empleado
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// Leer las entradas del gerente
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// Leer las entradas del desarrollador
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Crear un Employee, un Manager y un Developer
// TODO: Almacenar los tres en un arreglo de Employee para demostrar el polimorfismo
// TODO: Recorrer el arreglo e imprimir el ToString() y el bono de cada empleado
// Formato:
// {resultado de ToString}
// Bono: ${resultado de CalculateBonus}
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes