Menu
Coddy logo textTech

Итоговая проверка ООП

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 70 из 70.

challenge icon

Задание

Легко

Давайте объединим все, что вы узнали об ООП в Lua! Вы создадите систему транспортных средств, которая демонстрирует наследование, инкапсуляцию через соглашения об именовании и примеси (mixins) для дополнительных возможностей.

Вы организуете свой код в пяти файлах:

  • Vehicle.lua: Базовый класс для всех транспортных средств. Каждое транспортное средство имеет name и _speed (инициализируется значением 0), соответствующее соглашению о приватности. Включите геттер :getName(), геттер :getSpeed() и сеттер :setSpeed(value), который отклоняет отрицательные значения (если значение отрицательное, выведите Speed cannot be negative и не изменяйте значение). Добавьте метод :describe(), который возвращает "{name} moving at {speed}".
  • Refuelable.lua: Таблица-примесь, содержащая поведение, связанное с топливом. Включите метод :refuel(amount), который прибавляет значение к self._fuel, и метод :getFuel(), который возвращает текущий уровень топлива.
  • Car.lua: Наследуется от Vehicle и использует примесь Refuelable. Конструктор принимает name и инициализирует _fuel значением 0. Переопределите :describe(), чтобы он возвращал "{name} moving at {speed}, fuel: {fuel}". Примените примесь Refuelable, чтобы наделить автомобили возможностью заправки.
  • Bicycle.lua: Наследуется только от Vehicle — функциональность топлива не требуется. Конструктор принимает только name. Велосипеды используют унаследованный метод :describe() без изменений.
  • main.lua: Объедините все вместе! Создайте автомобиль и велосипед на основе входных данных, продемонстрируйте их различные возможности и покажите, как они разделяют общее поведение транспортных средств, обладая при этом уникальными особенностями.

Вы получите четыре входных значения:

  1. Название автомобиля
  2. Название велосипеда
  3. Скорость, которую нужно установить для обоих транспортных средств (число)
  4. Количество топлива для заправки автомобиля (число)

В вашем основном файле (main.lua):

  1. Создайте автомобиль и велосипед с заданными именами
  2. Установите скорость для обоих транспортных средств, используя третье входное значение
  3. Заправьте автомобиль, используя четвертое входное значение
  4. Выведите описание автомобиля
  5. Выведите описание велосипеда

Например, если входные данные — Sedan, Mountain Bike, 60 и 45, вывод должен быть следующим:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

Если входные данные — Sports Car, Road Bike, 120 и 80, вывод должен быть следующим:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

Эта задача демонстрирует, как наследование обеспечивает общее поведение (оба транспортных средства могут двигаться), примеси добавляют опциональные возможности (только автомобилям нужно топливо), а инкапсуляция защищает целостность данных (валидация скорости). Каждая техника служит своей цели в вашем проектировании!

Попробуйте сами

-- main.lua: Собираем всё вместе

local Car = require('Car')
local Bicycle = require('Bicycle')

-- Чтение входных данных
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: Создать автомобиль с заданным именем

-- TODO: Создать велосипед с заданным именем

-- TODO: Установить скорость для обоих транспортных средств

-- TODO: Заправить автомобиль указанным количеством топлива

-- TODO: Вывести описание автомобиля

-- TODO: Вывести описание велосипеда

Все уроки раздела Object Oriented Programming