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.
Desafío
IntermedioCrea la jerarquía de clases de una empresa en cinco archivos.
Person:person_nameyage, establecidos por el constructor.introduce()devuelveHi, I'm NAME, AGE years old.EmployeeextiendePersony agregaemployee_id(String) ysalary(anual, int). Sobrescribeintroduce()para agregarMy employee ID is ID.después del texto del padre.monthly_pay()devuelve el salario dividido por12.0.ManagerextiendeEmployeey agregadepartment. Sumonthly_pay()es el salario mensual del empleado multiplicado por1.2, ymanage_team()devuelveManaging the DEPARTMENT department.EngineerextiendeEmployeey agregalanguage.code()devuelveCoding in LANGUAGE.Payrolltiene dos funciones estáticas.role(p)devuelveManager,Engineer,EmployeeoPerson, la clase más específica dep.total_monthly(people)devuelve la suma demonthly_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.00Tu 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
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online