Menu
Coddy logo textTech

Riepilogo: gerarchia dei dipendenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 40 di 107.

challenge icon

Sfida

Facile

Costruiamo un sistema gerarchico per i dipendenti di un'azienda che mostri come la composizione modelli in modo elegante le strutture organizzative del mondo reale. Creerai un tipo base per i dipendenti, che i ruoli specializzati potranno estendere con comportamenti specifici.

Organizzerai il codice in tre file:

  • employee.go: Crea le fondamenta con una struct Employee contenente i campi ID, Name e BaseSalary (float64). Aggiungi due metodi:
    • Info() string che restituisce [ID] [Name]
    • CalculateBonus() float64 che restituisce il 10% dello stipendio base
  • roles.go: Crea due tipi specializzati di dipendente che incorporano Employee:
    • Manager con un campo TeamSize (int): i manager ricevono un bonus più alto, pari al 20% dello stipendio base più 100 $ per ogni membro del team. Ridefinisci il metodo CalculateBonus per implementare questo comportamento.
    • Developer con un campo Language (string): gli sviluppatori mantengono il bonus standard, ma ridefiniscono il metodo Info per aggiungere il loro linguaggio di programmazione: [ID] [Name] ([Language])
  • main.go: Leggi i dati dei dipendenti dall'input, crea un Manager e un Developer, quindi mostra le informazioni e il bonus calcolato di ciascun dipendente.

Verranno forniti i seguenti input:

  • Riga 1: ID del Manager
  • Riga 2: nome del Manager
  • Riga 3: stipendio base del Manager (float64)
  • Riga 4: dimensione del team del Manager (intero)
  • Riga 5: ID del Developer
  • Riga 6: nome del Developer
  • Riga 7: stipendio base del Developer (float64)
  • Riga 8: linguaggio di programmazione del Developer

Per ogni dipendente, stampa le sue informazioni e, nella riga successiva, il suo bonus. Formatta i bonus con due cifre decimali.

Ad esempio, dati M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 e Go, l'output dovrebbe essere:

M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00

Nota come il calcolo del bonus del Manager (20% di 80000 + 5×100 = 16500) differisca dal bonus standard del 10% del Developer, mentre il Developer personalizza la visualizzazione delle proprie informazioni. Entrambi i tipi hanno comunque accesso ai campi di Employee incorporati e possono chiamare i metodi originali quando necessario.

Provalo tu

package main

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

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

	// Leggi i dati 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))

	// Leggi i dati 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 i valori letti
	// Suggerimento: usa la composizione - Manager incorpora Employee

	// TODO: Crea un Developer usando i valori letti
	// Suggerimento: usa la composizione - Developer incorpora Employee

	// TODO: Stampa le informazioni del manager e il bonus (bonus formattato con 2 cifre decimali)
	// Usa fmt.Printf con "%.2f" per la formattazione

	// TODO: Stampa le informazioni del developer e il bonus (bonus formattato con 2 cifre decimali)
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online