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