Podsumowanie — role pracowników
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 42 z 70.
Wyzwanie
ŁatwyStwórzmy system premii dla pracowników, który pokaże, jak różne typy pracowników mogą korzystać z tego samego interfejsu, obliczając premie na różne sposoby!
Utworzysz niewielką hierarchię pracowników w czterech plikach:
Employee.lua: Klasa bazowa reprezentująca ogólnego pracownika. Konstruktor:new(name, salary)powinien przechowywać imię i nazwisko pracownika oraz jego wynagrodzenie. Dodaj metodę:calculateBonus(), która zwraca 10% wynagrodzenia (domyślna premia dla zwykłych pracowników), oraz metodę:getName(), która pobiera imię i nazwisko.Manager.lua: Klasa potomna dziedzicząca po Employee. Menedżerowie ciężko pracują i otrzymują za to nagrodę: nadpisz:calculateBonus(), aby zwracała 20% ich wynagrodzenia zamiast domyślnych 10%.Intern.lua: Kolejna klasa potomna dziedzicząca po Employee. Stażyści otrzymują stałą premię w wysokości50, niezależnie od wynagrodzenia: nadpisz:calculateBonus(), aby zawsze zwracała tę kwotę.main.lua: Połącz wszystko w całość! Wczytaj trzy imiona i nazwiska pracowników oraz trzy wynagrodzenia. Utwórz jednego Managera, jednego Interna i jednego zwykłego Employee. Zapisz ich w tablicy, a następnie przejdź po niej pętlą i wypisz imię i nazwisko każdej osoby, a po nim obliczoną premię.
Otrzymasz sześć danych wejściowych:
- Imię i nazwisko Managera
- Wynagrodzenie Managera
- Imię i nazwisko Interna
- Wynagrodzenie Interna
- Imię i nazwisko zwykłego pracownika
- Wynagrodzenie zwykłego pracownika
Dla każdego pracownika w swojej kolekcji (w kolejności: Manager, Intern, Employee) wypisz jego imię i nazwisko oraz premię w następującym formacie:
{name}: {bonus}Na przykład, jeśli dane wejściowe to Alice, 5000, Bob, 2000, Carol i 3000, wynikiem powinno być:
Alice: 1000
Bob: 50
Carol: 300Zwróć uwagę, że to samo wywołanie :calculateBonus() daje różne wyniki w zależności od typu pracownika: to właśnie polimorfizm! Manager otrzymuje 20% z 5000, Intern dostaje stałe 50, a zwykły Employee otrzymuje 10% z 3000.
Spróbuj swoich sił
-- main.lua: Połącz wszystko w całość
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- Odczytaj dane wejściowe
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO: Utwórz po jednym obiekcie klas Manager, Intern oraz zwykłym Employee
-- TODO: Umieść wszystkie trzy obiekty w tabeli (w kolejności: Manager, Intern, Employee)
-- TODO: Przejdź przez tabelę i wypisz imię oraz premię każdej osoby
-- Format: {name}: {bonus}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online