Menu
Coddy logo textTech

Resumen - Jerarquía de empleados

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy. Lección 40 de 107.

challenge icon

Desafío

Fácil

Construyamos un sistema de jerarquía de empleados para una empresa que demuestre cómo la composición modela elegantemente las estructuras organizativas del mundo real. Crearás un tipo de empleado base que los roles especializados pueden ampliar con sus propios comportamientos únicos.

Organizarás tu código en tres archivos:

  • employee.go: Crea los cimientos con una estructura Employee que contenga los campos ID, Name y BaseSalary (float64). Asígnale dos métodos:
    • Info() string que devuelva [ID] [Name]
    • CalculateBonus() float64 que devuelva el 10 % del salario base
  • roles.go: Crea dos tipos de empleados especializados que incorporen Employee:
    • Manager con un campo TeamSize (int): los gerentes reciben un bono mayor: el 20 % del salario base más 100 $ por cada miembro del equipo. Oculta el método CalculateBonus para implementar esto.
    • Developer con un campo Language (string): los desarrolladores mantienen el bono estándar, pero ocultan el método Info para añadir su lenguaje de programación: [ID] [Name] ([Language])
  • main.go: Lee los datos de los empleados desde la entrada, crea un Manager y un Developer, y después muestra la información y el bono calculado de cada empleado.

Se proporcionarán las siguientes entradas:

  • Línea 1: ID del Manager
  • Línea 2: nombre del Manager
  • Línea 3: salario base del Manager (float64)
  • Línea 4: tamaño del equipo del Manager (entero)
  • Línea 5: ID del Developer
  • Línea 6: nombre del Developer
  • Línea 7: salario base del Developer (float64)
  • Línea 8: lenguaje de programación del Developer

Para cada empleado, imprime su información y, en la línea siguiente, su bono. Formatea los bonos con dos decimales.

Por ejemplo, dados M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 y Go, tu salida debería ser:

M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00

Observa cómo el cálculo del bono del Manager (20 % de 80000 + 5×100 = 16500) difiere del bono estándar del 10 % del Developer, mientras que el Developer personaliza la forma en que se muestra su información. Ambos tipos siguen teniendo acceso a los campos de Employee incorporados y pueden llamar a los métodos originales cuando sea necesario.

Pruébalo tú mismo

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Leer detalles del Manager
	managerID, _ := reader.ReadString('\n')
	managerID = strings.TrimSpace(managerID)

	managerName, _ := reader.ReadString('\n')
	managerName = strings.TrimSpace(managerName)

	managerSalaryStr, _ := reader.ReadString('\n')
	managerSalary, _ := strconv.ParseFloat(strings.TrimSpace(managerSalaryStr), 64)

	teamSizeStr, _ := reader.ReadString('\n')
	teamSize, _ := strconv.Atoi(strings.TrimSpace(teamSizeStr))

	// Leer detalles del Developer
	devID, _ := reader.ReadString('\n')
	devID = strings.TrimSpace(devID)

	devName, _ := reader.ReadString('\n')
	devName = strings.TrimSpace(devName)

	devSalaryStr, _ := reader.ReadString('\n')
	devSalary, _ := strconv.ParseFloat(strings.TrimSpace(devSalaryStr), 64)

	devLanguage, _ := reader.ReadString('\n')
	devLanguage = strings.TrimSpace(devLanguage)

	// TODO: Crea un Manager usando los valores leídos
	// Pista: Usa composición - Manager embebe Employee

	// TODO: Crea un Developer usando los valores leídos
	// Pista: Usa composición - Developer embebe Employee

	// TODO: Imprime la info del manager y el bono (bono formateado a 2 decimales)
	// Usa fmt.Printf con "%.2f" para el formateo

	// TODO: Imprime la info del developer y el bono (bono formateado a 2 decimales)
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Go online