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