Menu
Coddy logo textTech

Итоги — Сборка робота

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

challenge icon

Задание

Легко

Давайте соберём 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:

  1. Имя робота (строка)
  2. Ответ: 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

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

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