Итоги — Сборка робота
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 54 из 70.
Задание
ЛегкоДавайте соберем Robot из отдельных составных частей! Вместо использования наследования вы создадите робота, скомпоновав его из отдельных объектов Arm, Leg и Head — каждый со своим специализированным поведением. Робот будет координировать эти части посредством делегирования.
Вы организуете свой код в пяти файлах:
Arm.lua: Создайте класс Arm с конструктором:new(side), который сохраняет сторону (например, "left" или "right"). Добавьте метод:raise(), который выводит{side} arm raised, и метод:lower(), который выводит{side} arm lowered.Leg.lua: Создайте класс Leg с конструктором:new(side), который сохраняет сторону. Добавьте метод:step(), который выводит{side} leg steps forward.Head.lua: Создайте класс Head с конструктором:new(). Добавьте метод:nod(), который выводитHead nods, и метод:shake(), который выводитHead shakes.Robot.lua: Создайте класс Robot, чей конструктор:new(name)сохраняет имя и создает все составные части внутри: левую руку, правую руку, левую ногу, правую ногу и голову. У робота должны быть следующие методы, которые делегируют задачи его частям::greet()— выводит{name} says hello!, затем поднимает правую руку, а затем опускает ее:walk()— заставляет левую ногу сделать шаг, затем правую ногу:respond(answer)— если answer равен"yes", голова кивает; если"no", голова качает из стороны в сторону
main.lua: Считайте входные данные для имени робота и ответа yes/no. Создайте Robot, заставьте его поприветствовать, пройтись, а затем ответить на основе входных данных.
Вы получите два входных значения:
- Имя робота (строка)
- Ответ:
yesилиno
Ваш вывод должен показывать, как робот координирует свои части:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsИли если ответ no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesНапример, если входные данные Robo и yes, вывод должен быть таким:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsОбратите внимание, что Robot не знает, как поднимаются руки или шагают ноги — он просто говорит каждой части, что делать. Каждый компонент независим и может быть использован повторно, а робот выступает в роли координатора, объединяющего их всех вместе!
Попробуйте сами
-- main.lua: Точка входа для задачи по композиции роботов
local Robot = require('Robot')
-- Чтение входных данных
local name = io.read()
local answer = io.read()
-- TODO: Создать робота с заданным именем
-- TODO: Пусть робот поприветствует
-- TODO: Пусть робот пойдет
-- TODO: Пусть робот ответит на основе введенного ответа
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур9Композиция и примеси
Отношение "Has-A"ДелегированиеПростые примесиПрименение нескольких примесейПримеси против наследованияИтоги — Сборка робота