Menu
CoddyTech

Repaso: jerarquía de empleados

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 20 de 65.

challenge icon

Desafío

Intermedio

Crea la jerarquía de clases de una empresa en cinco archivos.

  • Person: person_name y age, establecidos por el constructor. introduce() devuelve Hi, I'm NAME, AGE years old.
  • Employee extiende Person y agrega employee_id (String) y salary (anual, int). Sobrescribe introduce() para agregar My employee ID is ID. después del texto del padre. monthly_pay() devuelve el salario dividido por 12.0.
  • Manager extiende Employee y agrega department. Su monthly_pay() es el salario mensual del empleado multiplicado por 1.2, y manage_team() devuelve Managing the DEPARTMENT department.
  • Engineer extiende Employee y agrega language. code() devuelve Coding in LANGUAGE.
  • Payroll tiene dos funciones estáticas. role(p) devuelve Manager, Engineer, Employee o Person, la clase más específica de p. total_monthly(people) devuelve la suma de monthly_pay() de las personas que son empleados (incluidos los gerentes y los ingenieros).

Cada constructor pasa los valores del padre a super(), y cada sobrescritura que amplía el resultado del padre usa super().

El código proporcionado lee cuántas personas siguen y después una línea por persona: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT o engineer NAME AGE ID SALARY LANGUAGE. Para cada persona, imprime el rol entre corchetes y introduce(), el salario mensual de los empleados, manage_team() o code() cuando corresponda y, al final, el total. Para employee Alice 35 E123 60000 y manager Bob 45 M54 85000 Marketing, imprime:

[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

Tu código va en person.gd, employee.gd, manager.gd, engineer.gd y payroll.gd. main.gd contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

extends Node

func _ready():
	# Código de entrada/salida proporcionado: mantenlo tal como está
	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))

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de GDScript online