Wiederholung – Mitarbeiterhierarchie
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 20 von 65.
Aufgabe
MittelErstelle die Klassenhierarchie eines Unternehmens in fünf Dateien.
Person:person_nameundage, die vom Konstruktor festgelegt werden.introduce()gibtHi, I'm NAME, AGE years old.zurück.EmployeeerweitertPersonund fügtemployee_id(String) undsalary(Jahresgehalt, int) hinzu. Überschreibeintroduce(), sodass nach dem Text der ElternklasseMy employee ID is ID.hinzugefügt wird.monthly_pay()gibt das durch12.0geteilte Gehalt zurück.ManagererweitertEmployeeund fügtdepartmenthinzu. Seinmonthly_pay()ist das Gehalt eines Mitarbeiters multipliziert mit1.2, undmanage_team()gibtManaging the DEPARTMENT department.zurück.EngineererweitertEmployeeund fügtlanguagehinzu.code()gibtCoding in LANGUAGE.zurück.Payrollhat zwei statische Funktionen.role(p)gibt die spezifischste Klasse vonpzurück:Manager,Engineer,EmployeeoderPerson.total_monthly(people)gibt die Summe vonmonthly_pay()für alle Personen zurück, die Mitarbeiter sind (einschließlich Manager und Ingenieure).
Jeder Konstruktor übergibt die Werte der Elternklasse an super(), und jedes Override, das das Ergebnis der Elternklasse erweitert, verwendet super().
Der bereitgestellte Code liest, wie viele Personen folgen, und danach jeweils eine Zeile: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT oder engineer NAME AGE ID SALARY LANGUAGE. Für jede Person gibt er die Rolle in eckigen Klammern und introduce() aus, bei Mitarbeitern das Monatsgehalt, sofern vorhanden manage_team() oder code(), und am Ende die Gesamtsumme. Für employee Alice 35 E123 60000 und manager Bob 45 M54 85000 Marketing gibt er Folgendes aus:
[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.00Dein Code gehört in person.gd, employee.gd, manager.gd, engineer.gd und payroll.gd. main.gd enthält den bereitgestellten Ein- und Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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))
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler