Ripasso - Gerarchia dei dipendenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 20 di 65.
Sfida
MedioCrea la gerarchia di classi di un'azienda in cinque file.
Person:person_nameeage, impostati dal costruttore.introduce()restituisceHi, I'm NAME, AGE years old.EmployeeestendePersone aggiungeemployee_id(String) esalary(annuale, int). Esegui l'override diintroduce()per aggiungereMy employee ID is ID.dopo il testo della classe genitore.monthly_pay()restituisce lo stipendio diviso per12.0.ManagerestendeEmployeee aggiungedepartment. Il suomonthly_pay()è la retribuzione dell'impiegato moltiplicata per1.2, emanage_team()restituisceManaging the DEPARTMENT department.EngineerestendeEmployeee aggiungelanguage.code()restituisceCoding in LANGUAGE.Payrollha due funzioni statiche.role(p)restituisceManager,Engineer,EmployeeoPerson, la classe più specifica dip.total_monthly(people)restituisce la somma dimonthly_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.00Il 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
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online