Menu
CoddyTech

Ripasso - Gerarchia dei dipendenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 20 di 65.

challenge icon

Sfida

Medio

Crea la gerarchia di classi di un'azienda in cinque file.

  • Person: person_name e age, impostati dal costruttore. introduce() restituisce Hi, I'm NAME, AGE years old.
  • Employee estende Person e aggiunge employee_id (String) e salary (annuale, int). Esegui l'override di introduce() per aggiungere My employee ID is ID. dopo il testo della classe genitore. monthly_pay() restituisce lo stipendio diviso per 12.0.
  • Manager estende Employee e aggiunge department. Il suo monthly_pay() è la retribuzione dell'impiegato moltiplicata per 1.2, e manage_team() restituisce Managing the DEPARTMENT department.
  • Engineer estende Employee e aggiunge language. code() restituisce Coding in LANGUAGE.
  • Payroll ha due funzioni statiche. role(p) restituisce Manager, Engineer, Employee o Person, la classe più specifica di p. total_monthly(people) restituisce la somma di monthly_pay() per le persone che sono impiegati (inclusi manager e ingegneri).

Ogni costruttore passa i valori della classe genitore a super(), e ogni override che estende il risultato della classe genitore usa super().

Il codice fornito legge quante persone seguono, poi una riga per ciascuna: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT o engineer NAME AGE ID SALARY LANGUAGE. Per ogni persona stampa il ruolo tra parentesi quadre e introduce(), la retribuzione mensile per gli impiegati, manage_team() o code() quando esistono, e infine il totale. Per employee Alice 35 E123 60000 e manager Bob 45 M54 85000 Marketing stampa:

[Employee] Hi, I'm Alice, 35 years old. My employee ID is E123.
Monthly pay: 5000.00
[Manager] Hi, I'm Bob, 45 years old. My employee ID is M54.
Monthly pay: 8500.00
Managing the Marketing department.
Total monthly payroll: 13500.00

Il tuo codice va in person.gd, employee.gd, manager.gd, engineer.gd e payroll.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	var count := int(OS.read_string_from_stdin())
	var people: Array[Person] = []
	for i in count:
		var p := OS.read_string_from_stdin().split(" ")
		if p[0] == "manager":
			people.append(Manager.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "engineer":
			people.append(Engineer.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "employee":
			people.append(Employee.new(p[1], int(p[2]), p[3], int(p[4])))
		else:
			people.append(Person.new(p[1], int(p[2])))
	for person in people:
		print("[%s] %s" % [Payroll.role(person), person.introduce()])
		if person is Employee:
			print("Monthly pay: %.2f" % (person as Employee).monthly_pay())
		if person is Manager:
			print((person as Manager).manage_team())
		elif person is Engineer:
			print((person as Engineer).code())
	print("Total monthly payroll: %.2f" % Payroll.total_monthly(people))

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online