Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 42 из 70.

challenge icon

Задание

Легко

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

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

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

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

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

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

{name}: {bonus}

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

Alice: 1000
Bob: 50
Carol: 300

Обратите внимание, как один и тот же вызов :calculateBonus() даёт разные результаты в зависимости от типа каждого сотрудника: это полиморфизм в действии! Manager получает 20% от 5000, Intern получает фиксированные 50, а обычный Employee получает 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}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Lua