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

Vamos a construir 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 extender con sus propios comportamientos únicos.

Organizarás tu código en tres archivos:

  • employee.go: Crea la base con un struct Employee que contenga los campos ID, Name y BaseSalary (float64). Dale 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 incrusten (embed) Employee:
    • Manager con un campo TeamSize (int): los gerentes obtienen un bono mayor: 20% del salario base más $100 por cada miembro del equipo. Sombrea (shadow) el método CalculateBonus para implementar esto.
    • Developer con un campo Language (string): los desarrolladores mantienen el bono estándar pero sombrean el método Info para añadir su lenguaje de programación: [ID] [Name] ([Language])
  • main.go: Lee los detalles de los empleados desde la entrada, crea un Manager y un Developer, luego muestra la información de cada empleado y su bono calculado.

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 seguida de su bono en la siguiente línea. 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 cómo se muestra su información. Ambos tipos siguen teniendo acceso a los campos incrustados de Employee 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 los detalles del Gerente
	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 los detalles del Desarrollador
	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: Crear un Manager usando los valores leídos
	// Sugerencia: Usar composición - Manager incorpora a Employee

	// TODO: Crear un Developer usando los valores leídos
	// Sugerencia: Usar composición - Developer incorpora a Employee

	// TODO: Imprimir la información del manager y el bono (bono formateado con 2 decimales)
	// Usar fmt.Printf con "%.2f" para el formateo

	// TODO: Imprimir la información del developer y el bono (bono formateado con 2 decimales)
}

Todas las lecciones de Programación Orientada a Objetos