Menu
Coddy logo textTech

Итоги — Роли сотрудников

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 42 из 70.

challenge icon

Задание

Легко

Давайте создадим систему расчета премий, которая демонстрирует, как различные типы сотрудников могут использовать один и тот же интерфейс, рассчитывая премии по-разному!

Вы создадите небольшую иерархию сотрудников в четырех файлах:

  • Employee.lua: Ваш базовый класс, представляющий обычного сотрудника. Конструктор :new(name, salary) должен сохранять имя сотрудника и его зарплату. Включите метод :calculateBonus(), который возвращает 10% от зарплаты (премия по умолчанию для обычных сотрудников), и метод :getName() для получения имени.
  • Manager.lua: Дочерний класс, наследуемый от Employee. Менеджеры много работают и получают вознаграждение — переопределите :calculateBonus(), чтобы он возвращал 20% от их зарплаты вместо стандартных 10%.
  • Intern.lua: Еще один дочерний класс, наследуемый от Employee. Стажеры получают фиксированную премию в размере 50 независимо от их зарплаты — переопределите :calculateBonus(), чтобы он всегда возвращал эту сумму.
  • main.lua: Соберите все вместе! Считайте три входных значения для имен сотрудников и три входных значения для их зарплат. Создайте одного Manager, одного Intern и одного обычного Employee. Сохраните всех троих в таблицу, затем переберите ее в цикле и выведите имя каждого человека, а затем его рассчитанную премию.

Вы получите шесть входных значений:

  1. Имя менеджера
  2. Зарплата менеджера
  3. Имя стажера
  4. Зарплата стажера
  5. Имя обычного сотрудника
  6. Зарплата обычного сотрудника

Для каждого сотрудника в вашей коллекции (в порядке: Manager, Intern, Employee) выведите его имя и премию в следующем формате:

{name}: {bonus}

Например, если входные данные — Alice, 5000, Bob, 2000, Carol и 3000, вывод должен быть следующим:

Alice: 1000
Bob: 50
Carol: 300

Обратите внимание, как один и тот же вызов :calculateBonus() дает разные результаты в зависимости от типа каждого сотрудника — это и есть полиморфизм в действии! Менеджер получает 20% от 5000, стажер получает фиксированные 50, а обычный сотрудник получает 10% от 3000.

Попробуйте сами

-- main.lua: Собираем всё вместе

local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')

-- Чтение входных данных
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: Создайте одного Manager, одного Intern и одного обычного Employee

-- TODO: Сохраните всех троих в таблицу (в порядке: Manager, Intern, Employee)

-- TODO: Пройдите циклом по таблице и выведите имя и бонус каждого человека
-- Формат: {name}: {bonus}

Все уроки раздела Object Oriented Programming