Menu
Coddy logo textTech

Podsumowanie — role pracowników

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 42 z 70.

challenge icon

Wyzwanie

Łatwy

Stwó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ści 50, 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:

  1. Imię i nazwisko Managera
  2. Wynagrodzenie Managera
  3. Imię i nazwisko Interna
  4. Wynagrodzenie Interna
  5. Imię i nazwisko zwykłego pracownika
  6. 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: 300

Zwróć 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

Poćwicz samodzielnie: Kompilator Lua online