Podsumowanie – hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 20 z 65.
Wyzwanie
ŚredniZbuduj hierarchię klas firmy w pięciu plikach.
Person:person_nameiage, ustawiane przez konstruktor.introduce()zwracaHi, I'm NAME, AGE years old.Employeedziedziczy poPersoni dodajeemployee_id(String) orazsalary(roczna, int). Nadpiszintroduce(), aby po tekście klasy nadrzędnej dodaćMy employee ID is ID..monthly_pay()zwraca pensję podzieloną przez12.0.Managerdziedziczy poEmployeei dodajedepartment. Jegomonthly_pay()to pensja pracownika pomnożona przez1.2, amanage_team()zwracaManaging the DEPARTMENT department.Engineerdziedziczy poEmployeei dodajelanguage.code()zwracaCoding in LANGUAGE.Payrollma dwie funkcje statyczne.role(p)zwracaManager,Engineer,EmployeelubPerson— najbardziej szczegółową klasę obiektup.total_monthly(people)zwraca sumę wartościmonthly_pay()dla osób będących pracownikami (w tym menedżerów i inżynierów).
Każdy konstruktor przekazuje wartości klasy nadrzędnej do super(), a każde nadpisanie rozszerzające wynik klasy nadrzędnej korzysta z super().
Dostarczony kod odczytuje liczbę kolejnych osób, a następnie po jednej osobie w każdym wierszu: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT lub engineer NAME AGE ID SALARY LANGUAGE. Dla każdej osoby wypisuje rolę w nawiasach kwadratowych i wynik introduce(), miesięczną pensję w przypadku pracowników, wynik manage_team() lub code(), jeśli dana metoda istnieje, a na końcu sumę. Dla employee Alice 35 E123 60000 i manager Bob 45 M54 85000 Marketing wypisuje:
[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.00Umieść swój kod w plikach person.gd, employee.gd, manager.gd, engineer.gd i payroll.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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))
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online