Revisão - Hierarquia de funcionários
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 20 de 65.
Desafio
MédioCrie a hierarquia de classes de uma empresa em cinco arquivos.
Person:person_nameeage, definidos pelo construtor.introduce()retornaHi, I'm NAME, AGE years old.EmployeeestendePersone adicionaemployee_id(String) esalary(anual, int). Sobrescrevaintroduce()para adicionarMy employee ID is ID.após o texto da classe pai.monthly_pay()retorna o salário dividido por12.0.ManagerestendeEmployeee adicionadepartment. Seumonthly_pay()é o pagamento do funcionário multiplicado por1.2, emanage_team()retornaManaging the DEPARTMENT department.EngineerestendeEmployeee adicionalanguage.code()retornaCoding in LANGUAGE.Payrolltem duas funções estáticas.role(p)retornaManager,Engineer,EmployeeouPerson, a classe mais específica dep.total_monthly(people)retorna a soma demonthly_pay()das pessoas que são funcionários (incluindo gerentes e engenheiros).
Todo construtor passa os valores da classe pai para super(), e toda sobrescrita que estende o resultado da classe pai usa super().
O código fornecido lê quantas pessoas vêm a seguir e, então, uma linha para cada uma: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT ou engineer NAME AGE ID SALARY LANGUAGE. Para cada pessoa, ele imprime a função entre colchetes e introduce(), o pagamento mensal para funcionários, manage_team() ou code() quando existirem e, no final, o total. Para employee Alice 35 E123 60000 e manager Bob 45 M54 85000 Marketing, ele 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.00Seu código deve ficar em person.gd, employee.gd, manager.gd, engineer.gd e payroll.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online