Menu
CoddyTech

Récapitulatif – Hiérarchie des employés

Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 20 sur 65.

challenge icon

Défi

Moyen

Créez la hiérarchie de classes d’une entreprise répartie sur cinq fichiers.

  • Person : person_name et age, définis par le constructeur. introduce() renvoie Hi, I'm NAME, AGE years old.
  • Employee étend Person et ajoute employee_id (String) et salary (annuel, int). Redéfinissez introduce() pour ajouter My employee ID is ID. après le texte du parent. monthly_pay() renvoie le salaire divisé par 12.0.
  • Manager étend Employee et ajoute department. Son monthly_pay() correspond au salaire mensuel de l’employé multiplié par 1.2, et manage_team() renvoie Managing the DEPARTMENT department.
  • Engineer étend Employee et ajoute language. code() renvoie Coding in LANGUAGE.
  • Payroll possède deux fonctions statiques. role(p) renvoie Manager, Engineer, Employee ou Person, la classe la plus spécifique de p. total_monthly(people) renvoie la somme des monthly_pay() des personnes qui sont des employés (y compris les managers et les ingénieurs).

Chaque constructeur transmet les valeurs du parent à super(), et chaque redéfinition qui étend le résultat du parent utilise super().

Le code fourni lit le nombre de personnes qui suivent, puis une ligne par personne : person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT ou engineer NAME AGE ID SALARY LANGUAGE. Pour chaque personne, il affiche le rôle entre crochets et introduce(), le salaire mensuel pour les employés, manage_team() ou code() le cas échéant, puis le total à la fin. Pour employee Alice 35 E123 60000 et manager Bob 45 M54 85000 Marketing, il affiche :

[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

Votre code va dans person.gd, employee.gd, manager.gd, engineer.gd et payroll.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

extends Node

func _ready():
	# Code d'entrée/sortie fourni : conservez-le tel quel
	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))

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur GDScript en ligne