Итоги — Роли сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 42 из 70.
Задание
ЛегкоДавайте создадим систему расчёта бонусов для сотрудников, которая демонстрирует, как разные типы сотрудников могут использовать один и тот же интерфейс, рассчитывая бонусы по-разному!
Вы создадите небольшую иерархию сотрудников в четырёх файлах:
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. Сохраните всех троих в таблице, затем пройдите по ней в цикле и выведите имя каждого человека, после которого укажите рассчитанный бонус.
Вы получите шесть входных значений:
- Имя Manager
- Зарплата Manager
- Имя Intern
- Зарплата Intern
- Имя обычного сотрудника
- Зарплата обычного сотрудника
Для каждого сотрудника в вашей коллекции (в порядке: 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}
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua